- ベストアンサー
CSVファイルのマクロ化についての質問
- CSVファイルで指定の条件を満たすデータを操作するマクロの作成方法について教えてください。
- 指定の条件を満たす行のデータを操作するマクロを作成する方法を教えてください。CSVファイルを使用します。
- CSVファイルで特定の条件を満たす行のデータを操作するマクロの作成方法を教えてください。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
ご苦労さまです。既に完成したも同然です。 ・・・・ Cells(i, 6).Value = Cells(i, 1).Value 'A列をF列にコピー If Not WorksheetFunction.IsNumber(Cells(i, 1).Value) Then'A列が数値でない場合 Cells(i, 6).Value = Cells(i, 1).Value'F列にA列の値を入れる End If If Cells(i, 4).Value = "" Then 'D列がブランクのときは、 ・・・ となります。
その他の回答 (3)
- imogasi
- ベストアンサー率27% (4737/17069)
質問のデータは、この質問コーナーの質問として表示されると、列がずれてませんか。見難いのではないか。 ーーー 質問のファイルはCSVではないではないか。 CSVはComma Separated ValuesやComma Separated Valuableの略で、カンマで列データを区切っているもの。カンマが無い。テキストファイルとかprnファイルの類だ。 A.CSV-CSVでpログラムコーディングで修正希望の修正を行うのか B.一旦エクセルにCSVを読み込んでエクセルシート上で希望のように修正するのか それもはっきりしない。 勉強にする例題としては、ごたごたし過ぎの問題と思うが。 VBAを勉強するなら、もっと覚えなければならないこと理解せねばならないことがいっぱい有る。目の前の問題をすぐやろうとしないほうが良い。
お礼
回答有難うございます。 そうですね勉強することが先ですね。 すみません。がんばります。
- hallo-2007
- ベストアンサー率41% (888/2115)
No1です。 FOR~NEXT の構文は理解できているでしょうか? Range("A65536").End(xlUp).Row は、A列の最終の行セル(A65536)から上へ移動して空白でない行の行番号を数値で返します。 データが1000行目まで入っていれば 1000ということですので For~Nextの間に記述した内容をiという変数が1000になるまで繰り返します。 Cells(i,1)は 最初はiが1ですので A1セルのことです。 Forでiが一つづつ増えていきますので、2度目は A2セルになります。 このようにして、1行目から順に最後の行まで順に実行していきます。 If Cells(i, 4).Value = "" Then は4列目(D列)が空白の時は、EndIFまでの間に記述した内容を実行します。 Cells(i, 3).Value = Cells(i, 1).Value 3列目(C列)に1列目(A列)の値を入れます。 1列目(A列)には999 というのは Cells(i, 1).Value = "999" となります。 A列が数値かどうかですが、ワークシートの関数を利用するとわかりやすいと思います。 If WorksheetFunction.IsNumber(Cells(i, 1).Value) Then やりたいこと End If で1列目(A列)が数値の場合、 やりたいことが実行されます。 If Not WorksheetFunction.IsNumber(Cells(i, 1).Value) Then Cells(i, 6).Value = Cells(i, 1).Value End If で数値でない場合に、6列目(F列)に1列目の値が入ります。 これらを組み合わせてやってみてください。 うまく出来ない場合は途中まで結構なのでコードを載せてください
補足
hallo-2007さん有難うございます。 FOR~NEXTは、なんとか理解しています。 If~EndIfもわかります。 理解はしていても中身が難しいでした。 途中までのコードを乗せてみました。 Sub Macro1() For i = 1 To Range("AA65536").End(xlUp).Row Cells(i, 6).Value = Cells(i, 1).Value 'A列をF列にコピー 「たぶんここにA列の数字以外をF列に入れるというコード作りたい」 If Cells(i, 4).Value = "" Then 'D列がブランクのときは、 Cells(i, 3).Value = Cells(i, 1).Value 'A列をC列に、 Cells(i, 4).Value = Cells(i, 2).Value 'B列をD列に Cells(i, 1).Value = "999" 'ブランクのA列に入れる Cells(i, 2).Value = "@@@" 'ブランクのB列に入れる End If Next End Sub こんな感じですが、後はF列には数字以外を残したいのです。 よろしくお願いします。
- hallo-2007
- ベストアンサー率41% (888/2115)
VBAについては大丈夫でしょうか? ここで記述されたコードを丸写ししても後で困る事態になると思いますので 取り合えず、オーソドックスなプログラムのフロー(流れ)です。 A列の1行目から順に下へ移動して最終のデータが入力されている行まで繰り返す。 Sub Macro1() For i = 1 To Range("A65536").End(xlUp).Row Cells(i, 7).Value = i'本当はここにやりたいことを記述します。 Next End Sub をコピィして実行してみてください。 これだけでは、G列に数値が入るだけですが、 Sub Macro1() For i = 1 To Range("A65536").End(xlUp).Row 'A列をE列にコピー Cells(i, 5).Value = Cells(i, 1).Value If Cells(i, 4).Value = "" Then 'D列がブランクのときは、A列をC列に、B列をD列に持ってきて Cells(i, 3).Value = Cells(i, 1).Value Cells(i, 4).Value = Cells(i, 2).Value End If Next End Sub とかとった具合になります。 >D列がブランクのときは A列には999B列には@@@ と >F列はE列の数字以外を持ってきたい は自分で考えてみてください。勉強になると思います。 上記のコードで意味がわからない部分がありましたら、補足にでも記述してください。
お礼
早速の回答有難うございました。 やっぱりマクロは素人のため D列がブランクのときは A列には999B列には@@@ F列はE列の数字以外を持ってきたい といったことまでわかりません。 勉強のためやってみたのだが・・・ すみません。
お礼
有難うございました。 本当に助かりました。 でも、まだまだ勉強不足で申し訳ありません。 もっと勉強します。 本当に有難うございました。