Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


12080 / 13646 ツリー ←次へ | 前へ→

【12475】セルAに決まった文字が入っている行だけ... VBA素人 04/4/5(月) 17:29 質問
【12481】特定のセルを認識してcsvに書き込む shousuke 04/4/5(月) 23:10 回答
【12483】Re:特定のセルを認識してcsvに書き込む VBA素人 04/4/6(火) 9:33 質問
【12487】Re:特定のセルを認識してcsvに書き込む Asaki 04/4/6(火) 11:29 回答
【12494】Re:特定のセルを認識してcsvに書き込む VBA素人 04/4/6(火) 13:21 質問
【12497】Re:特定のセルを認識してcsvに書き込む Asaki 04/4/6(火) 13:39 回答
【12501】Re:特定のセルを認識してcsvに書き込む VBA素人 04/4/6(火) 13:59 質問
【12502】Re:特定のセルを認識してcsvに書き込む Jaka 04/4/6(火) 14:18 回答
【12503】Re:特定のセルを認識してcsvに書き込む Asaki 04/4/6(火) 14:20 回答
【12516】Re:特定のセルを認識してcsvに書き込む VBA素人 04/4/6(火) 17:01 お礼

【12475】セルAに決まった文字が入っている行だけ...
質問  VBA素人  - 04/4/5(月) 17:29 -

引用なし
パスワード
   始めましてよろしくお願いします。
あるシートをCSVに落としたいと思います。
そのとき、Aの列に「追加」と書いている行と
「削除」と書いている行をそれぞれ別の
csvファイルに落としたいです。
「追加」「削除」と書いていない行は無視したいです。

ファイルを開いて、csvに落とすことは出来たのですが、
ファイルを分ける方法が分かりません。
よろしくお願いします。

【12481】特定のセルを認識してcsvに書き込む
回答  shousuke WEB  - 04/4/5(月) 23:10 -

引用なし
パスワード
   こんなの作ってみました。

sub ファイル名

Dim D_Name as String
Dim i As Integer
D_Name="○"

Open D_Name For Output As #1
For i = 0 To 5000 '行の数だけ

if Sheets("data").Range("a1").Offset(i, 0)="削除" then goto skip_
'削除の時は書き込みしない

Print #1, Sheets("data").Range("a1").Offset(i, 0)
skip_:

Next

Close #1
End Sub

古典的なコマンドですが、素早い処理が可能です。
ただし、この場合、iの値は初期化されませんので、空白行が一つ入ります。
ちょっと加工してみてください。

【12483】Re:特定のセルを認識してcsvに書き込む
質問  VBA素人  - 04/4/6(火) 9:33 -

引用なし
パスワード
   さっそくありがとうございます。


>Print #1, Sheets("data").Range("a1").Offset(i, 0)

削除以外は、ここで書き込みを行うと思うのですが、どこに
書き込まれているかが分かりません。

別ファイルでもないようだし、別シートでもないみたいで…
スキップで実行するとif文もちゃんと期待どうりに
実行されているのですが、この行の処理がよく
分からないのです…

よろしくお願いします。

【12487】Re:特定のセルを認識してcsvに書き込む
回答  Asaki  - 04/4/6(火) 11:29 -

引用なし
パスワード
   こんにちは。

変数 D_Name で指定された名前のテキストファイルが出来てませんか?
エクスプローラで検索かけてみてください。

【12494】Re:特定のセルを認識してcsvに書き込む
質問  VBA素人  - 04/4/6(火) 13:21 -

引用なし
パスワード
   ありがとうございます。
テキストファイルは出来ました。が、思った結果が得られません
でした。
振り分けは上手くいったようなのですが、書き出しが、
Aのセルのみ書き出しされていて、行全体が書き出しされて
いませんでした。

セルAに「追加」と入っているものと「削除」を入っている
ものを2つのファイルに落としたいので、下記のように
書き換えました。セルAのみだけしか書き出しされないのですが、
間違えているでしょうか?

よろしくお願いします。

  Dim D_Name1 As String
  Dim D_Name2 As String
  Dim 検索行 As Integer
  D_Name1 = "add.csv"
  D_Name2 = "del.csv"
  検索行 = 1
  
  Open D_Name1 For Output As #1
  Open D_Name2 For Output As #2
  For 検索行 = 0 To 50 '行の数だけ
  
  If Sheets("data").Range("a1").Offset(検索行, 0) <> "追加" Then GoTo skip1_
  '追加の時は書き込み・それ以外はskip
  
  Print #1, Sheets("data").Range("a1").Offset(検索行, 0)
skip1_:
  
  
  If Sheets("data").Range("a1").Offset(検索行, 0) <> "削除" Then GoTo skip2_
  '削除の時は書き込み・それ以外はskip
  
  Print #2, Sheets("data").Range("a1").Offset(検索行, 0)
skip2_:
  
  Next
  
  Close #1
  Close #2

【12497】Re:特定のセルを認識してcsvに書き込む
回答  Asaki  - 04/4/6(火) 13:39 -

引用なし
パスワード
   >Aのセルのみ書き出しされていて、行全体が書き出しされていませんでした。
A列しか出力してませんからね。

GoToはあまりお薦めしません。
また、カウンタ変数にはLong型をお薦めします。

ちょっと書いてみました。
動作確認していませんので、動かないかも。。。
Sub test()
  Dim D_Name1 As String
  Dim D_Name2 As String
  Dim 検索行 As Long
  Dim i    As Long
  Dim str   As String
  
  D_Name1 = "add.csv"
  D_Name2 = "del.csv"
 
  Open D_Name1 For Output As #1
  Open D_Name2 For Output As #2

  With Sheets("data")
    For 検索行 = 0 To 50 '行の数だけ
      str = ""
      Select Case .Cells(検索行, 1).Value
        Case "追加"
          For i = 1 To .Cells(検索行, 256).End(xlToLeft).Column
            str = str & vbTab & .Cells(検索行, i).Value
          Next i
          Print #1, Mid(str, Len(vbTab) + 1)
        Case "削除"
          Print #2, Mid(str, Len(vbTab) + 1)
      End Select
    Next 検索行
  End With
 
  Close #1
  Close #2
End Sub

【12501】Re:特定のセルを認識してcsvに書き込む
質問  VBA素人  - 04/4/6(火) 13:59 -

引用なし
パスワード
   残念ながら
Select Case .Cells(検索行, 1).Value
でとまってしまいます。

実行時エラー'1004'
アプリケーションエラーまたはオブジェクト定義エラーです。

とメッセージが出ます。自分でも調べてみているのですが、
まだ分かりません。

【12502】Re:特定のセルを認識してcsvに書き込む
回答  Jaka  - 04/4/6(火) 14:18 -

引用なし
パスワード
   ▼VBA素人 さん:
>残念ながら
>Select Case .Cells(検索行, 1).Value
>でとまってしまいます。

>  For 検索行 = 0 To 50 '行の数だけ
>    str = ""
>    Select Case .Cells(検索行, 1).Value

こんにちは。
そりゃエラーになるでしょうね。

0行目のA列なんて存在しないもの...。
For 検索行 = 1 To 50
とか、コード内容に沿った様に変えてください。

【12503】Re:特定のセルを認識してcsvに書き込む
回答  Asaki  - 04/4/6(火) 14:20 -

引用なし
パスワード
   >0行目のA列なんて存在しないもの...。
すみません。
カウンタ見てませんでした。
Offset() 書き換えたので、多分、1から51ですね。

【12516】Re:特定のセルを認識してcsvに書き込む
お礼  VBA素人  - 04/4/6(火) 17:01 -

引用なし
パスワード
   いろいろありがとうございました。
別の方法になるのですが、なんとか思うように
出来るようになりました。
またよろしくお願いします。

12080 / 13646 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free