会社を卒業したのんちおじさん。

人生は知恵と工夫と思いやり!
優しさほど強いものはなく、本当の強さほど優しいものはない -ラルフ・W・ソックマン-

Alcohol 52%

2009-01-31 11:39:46 | いろんなこと
「Alcohol 52%」 なる妙な名前のフリー・ソフトがあります。

これはリッピングしたDVDのイメージ・ファイルを仮想ドライブにマウントすることができ、物理的なDVDの出し入れをすることなく扱える非常に便利なプログラムです。

そこで先週の休みに早速リッピングしてマウントしてみます、これはなかなか使えますね、手持ちのDVDをみんなイメージ化しちゃおうと思いましたが「DVD Decrypter」でリッピングすると生の巨大なデータになってしまうのです。

今年の初め1.5テラのHDDを増設してかなり余裕が出来ましたが要領を節約するに越したことはない、と言う訳で「DVD Shrink」で 5.1Ch データを削ってリッピングしました、そうして出来たのが「ISOとMDS」と言うファイル、MDSってなんだか知りませんが特になくても大丈夫みたいなことがwebで見たことがあるのでほんの小さなファイルだし目障りなので消しました。

今日になってマウントしたDVDの音を聴きながらいろいろと作業をしようと思ったのですがなぜか「Win DVD」も「Windows Media Center」も「Windows Media Player」もハング・アップしたりしてうまく動きません、そこでDVDそのものをドライブに入れてみますがこれは問題ありません。

あれこれやってみましたがどうやら「MDS」ファイルを消したのが原因だということが分かりました、このファイルさえ残しておけば不要データを削除したイメージ・ファイルも問題なく再生できるようになりました。

COUNTIFでできた3

2009-01-31 10:37:28 | Excelのお話
次に抽出したデータをCSVで出力するのですが実はこのCSVというのが曲者でCSVはフォーマットが固定されたものという概念がまかり通っています。

汎用性が高いのでよく使われます、でも「Comma Separated Values」と言うように要するにデータが「","で区切られていればよい」のでデータを括る記号は「"」だろうが「'」だろうが・・あるいは何もなくても良いのです。

このことがExcelやAccessで出力するときに苦労する種になることがよくあります、今回もオフコンから出力されたCSVデータをそのものを加工し、それと全く同じフォーマットで出力しなければならずこれに苦労しました。

Open コマンドで開き、単にCSVで出力するのなら Write コマンドを使えばよいのです、文字列データは「"ABC"」のように、数値データは「123」のように出力されますがデータが空のフィールドは飛ばされてしまうのです、また備考欄のようにどんなデータが入るか分からないフィールドは基本的に文字列として扱わなければならないのですが数字だけだとそこだけフィールドが「"」なしで出力されてしまい、データの種類の一貫性がなくなります。

ところがオフコンの出力データではデータが空であっても文字列フィールドでは「"」で括り、数値フィールドも飛ばすことはないのです。

つまり、文字列として扱わなければならないフィールドは文字列として、数値として扱わなければならないフィールドは数値フィールドとして出力しなければならず、できたのがこれ。

Sub csvで出力()
  With Cells(1).CurrentRegion
    行 = .Rows.Count
    列 = .Columns.Count
  End With
  Open "C:TREEIDECDATAtest.csv" For Output As #1

  For begin_row = 1 To 行
    For begin_column = 1 To 列 + 1
      v = Cells(begin_row, begin_column)
      If begin_column = 7 Or begin_column = 8 Then GoTo moji
      If Len(v) = 0 Then
        Print #1, Chr(34) & "" & Chr(34) & ",";
      ElseIf IsNumeric(v) = True Then
        Print #1, v & ",";
      Else
moji:
        Print #1, Chr(34) & v & Chr(34) & ",";
      End If
    Next
    Print #1, Chr(34) & v & Chr(34)
  Next
  Close #1
End Sub

結局 Write コマンドを使うと面倒なことになりそうなので敢えて Print コマンドで済ませました。

COUNTIFでできた2

2009-01-31 09:20:52 | Excelのお話
=and(countif(特価一覧表,商品A),countif(特価一覧表,特価番号))

上記のようにやると条件1と条件2は全く別個に結果を拾ってしまい本来特価がないものまで拾ってしまうことに気づき、マクロしかないかと取りあえず作って走らせてみたがやたら時間がかかり実用的ではありません。


前の記事に

> 「商品A」+「ZZZ123」という組み合わせが特価一覧データにあれば

と書きました。

要するにそのまんまをやればいいのです。

特価番号、型番、仕切、特別価格

上記項目に手を加えて

特価番号、バラ型番、型番、仕切、特別価格、バラ型番結合、型番結合

とし、売り上げデータの右端列にマクロで下記のように式を入力。

Sub 特価があるか()
Max_GYO = Cells(1).CurrentRegion.Rows.Count
Set flg = Range(Cells(1, 16), Cells(Max_GYO, 16))
With flg
  .Value = "=COUNTIF(特別価格!F:G,B1&J1)"
  .Copy
  .PasteSpecial Paste:=xlValues
End With
Application.CutCopyMode = False
End Sub

これで該当データには「1」または「2」が表示されます、なぜ「2」があるかというと売り上げデータの中にはパック商品をパック商品のまま売る場合とバラで売る場合があるのでそうなるのです。

これを

Sub 有効データを残す()
Max_GYO = Cells(1).CurrentRegion.Rows.Count
  For i = Max_GYO To 1 Step -1
    If Cells(i, 16) <1 Then
      Rows(i).EntireRow.Delete
    End If
  Next i
  Columns(16).EntireColumn.Delete
  Cells(1).Activate
End Sub

にて必要なデータを抽出します。