CSVファイルのマクロ化についての質問

このQ&Aのポイント
  • CSVファイルで指定の条件を満たすデータを操作するマクロの作成方法について教えてください。
  • 指定の条件を満たす行のデータを操作するマクロを作成する方法を教えてください。CSVファイルを使用します。
  • CSVファイルで特定の条件を満たす行のデータを操作するマクロの作成方法を教えてください。
回答を見る
  • ベストアンサー

マクロを教えてください

CSVファイルで、     A    B    C    D    E   F 1 444  あああ  123  けけけ 2 555  いいい  456  かかか 3 666  ううう  000        4 山   5 川 上記のようなCSVファイルで3行目のC列には0・D列はブランクです。 そこで3行目でD列がブランクのときは、A列をC列に、B列をD列に持ってきて あいたA列には999B列には@@@を入れたいのです。 そしてもうひとつは、A列をE列にコピーをしてF列はE列の数字以外を持ってきたいのです。 結果は   A      B    C    D   E   F 1 444  あああ  123  けけけ  444 2 555  いいい  456  かかか  555 3 999  @@@  666  ううう  999 4 山                    山 5 川                    川 といった結果のマクロを作りたいです。 どなたか教えてください。よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.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列がブランクのときは、 ・・・ となります。

o2t-ta
質問者

お礼

有難うございました。 本当に助かりました。 でも、まだまだ勉強不足で申し訳ありません。 もっと勉強します。 本当に有難うございました。

その他の回答 (3)

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.3

質問のデータは、この質問コーナーの質問として表示されると、列がずれてませんか。見難いのではないか。 ーーー 質問のファイルはCSVではないではないか。 CSVはComma Separated ValuesやComma Separated Valuableの略で、カンマで列データを区切っているもの。カンマが無い。テキストファイルとかprnファイルの類だ。 A.CSV-CSVでpログラムコーディングで修正希望の修正を行うのか B.一旦エクセルにCSVを読み込んでエクセルシート上で希望のように修正するのか それもはっきりしない。 勉強にする例題としては、ごたごたし過ぎの問題と思うが。 VBAを勉強するなら、もっと覚えなければならないこと理解せねばならないことがいっぱい有る。目の前の問題をすぐやろうとしないほうが良い。

o2t-ta
質問者

お礼

回答有難うございます。 そうですね勉強することが先ですね。 すみません。がんばります。

  • hallo-2007
  • ベストアンサー率41% (888/2115)
回答No.2

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列目の値が入ります。 これらを組み合わせてやってみてください。 うまく出来ない場合は途中まで結構なのでコードを載せてください

o2t-ta
質問者

補足

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)
回答No.1

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列の数字以外を持ってきたい は自分で考えてみてください。勉強になると思います。 上記のコードで意味がわからない部分がありましたら、補足にでも記述してください。

o2t-ta
質問者

お礼

早速の回答有難うございました。 やっぱりマクロは素人のため D列がブランクのときは A列には999B列には@@@ F列はE列の数字以外を持ってきたい といったことまでわかりません。 勉強のためやってみたのだが・・・ すみません。

関連するQ&A

  • 複数のcsvファイルをマクロ(VBA)で取り込みたい

    複数のcsvファイルをマクロ(VBA)で取り込みたい csvファイルの中身が、 20090507 120508 osaka 項目1,項目2,項目3,・・・・・,項目10 a1,a2,a3,・・・・・,a10 b1,b2,b3,・・・・・,b10 c1,c2,c3,・・・・・,c10 や 20090507 132529 hokkaido 項目1,項目2,項目3,・・・・・,項目10 d1,d2,d3,・・・・・,d10 e1,e2,e3,・・・・・,e10 f1,f2,f3,・・・・・,f10 となっているcsvファイルが特定のフォルダの中に100以上あります。 このcsvふぁいるの5行目だけをaccessに書き込んでテーブルに追加していきたいと思っています。 項目1,項目2,項目3,・・・・・,項目10 a1,a2,a3,・・・・・,a10 d1,d2,d3,・・・・・,d10 このようなテーブルができればいいのですが・・・ csvファイルを開く→5行目をテーブルに追加→csvファイルを閉じる(削除する)→次のcsvファイルを開く→5行目をテーブルに追加→csvファイルを閉じる(削除する) この流れでいいと思うのですが方法が分かりません。 丸投げですがよろしくお願いします。

  • エクセル 特定セルの足し算をするマクロ

    C列、D列、E列を足し合計をF列に記入するマクロを教えて下さい。 (3行目から値のある行まで。)  A B  C  D  E   F 1 2 3     24  16  19  59となる様に 4     35  49  41 5     22  19  72 6     ・   ・   ・ 7     ・   ・   ・ 宜しくお願いします。

  • エクセルのマクロについての質問です。

    ファイルA.xls __A__B__C 1_______1 2_______5 3_______7 4_______4 5_______5 6_______6 ファイルB.csv __A__B__C 1_1__5 2_5__6 3_7__7 ファイルC.csv __A__B__C 1_6__5 2_7__8 3_6__8 のような3つのファイルがあったとして ファイルA.xlsからマクロを実行して __A__B__C 1_1__5__1 2_5__6__5 3_7__7__7 4_6__5__4 5_7__8__5 6_6__8__6 ファイルB.csvをファイルA.xlsのA列とB列に ファイルC.csvをその下の最終行に貼り付けたいと思うのですが どのようにすればいいのでしょうか? 注意点としては、 (1)今は例として3行、3行の6行ですが、実際は1000行以上あり 毎回行数は変わります。 (2)ファイルA.xlsのC列には実際は関数が入っていて、 ファイルB.csvとファイルC.csvを張り付けた情報を計算して表示する ようになっています。

  • Excelのマクロの組み方を教えてください

    3行と2列のデーターの塊があり、これを 1行のデータに並べ替えるにはどうしたらいいでしょうか? ただし 行方向(縦に) 30件、列方向(横に) 20件ほど入っていて、複雑です。 空白の行や列はないものと考えていただいて結構です。 詳細説明 A1からCB1はタイトルなどが入っていて、無視して、 データーの配列が以下の場合 A2 B2 C2 D2 E2 F2 →CB2まで A3 B3 C3 D3 E3 F3 →CB3まで A4 B4 C4 D4 E4 F4 →CB4まで A5 B5 C5 D5 E5 F5→CB5まで A6 B6 C6 D6 E6 F6→CB6まで A7 B7 C7 D7 E7 F7→CB7まで ↓ ↓ ↓ ↓↓ ↓ A120まで CB120まで を A2 A3 A4 B2 B3 B4 C2 C3 C4 D2 D3 D4 ↓ CA2 CA3 CA4 CB2 CB3 CB4 次に A5 A6 A7 B5 B6 B7 C5 C6 C7 D5 D6 D7 ↓ A118 A119 A120 B118 A119 A120 などと並べかえはどのようにマクロを組めばよいですか?

  • Excel 2007のマクロ記述について

    Excel 2007で、B4セルからI最終行までの整数のみを小数点以下1桁にする処理をマクロで実行したいのですが、どのように記述したらよいか教えてください。 最終行とはI列にセルの値がある最後の行です。 下記の例のマクロ実行結果は、1→1.0、2→2.0となります。 (例)      列      A  B    C    D    E   F  G   H  I    J      K  行4  A1 0.9   0.9   0.9   0.9  1.2  1.2   2  2   CIRCLE  CIRCLE    5  A2 1.4   1.4   1.6   1.6   1   1  1.5  1.5  CIRCLE  CIRCLE    6  A3 0.71  0.71   0.71  0.71  1   1  1.5  1.5  CIRCLE  CIRCLE マクロ実行結果      列      A  B    C    D    E   F  G   H   I    J      K  行4  A1 0.9   0.9   0.9   0.9  1.2  1.2  2.0  2.0  CIRCLE  CIRCLE    5  A2 1.4   1.4   1.6   1.6  1.0  1.0  1.5  1.5  CIRCLE  CIRCLE    6  A3 0.71  0.71   0.71  0.71  1.0  1.0  1.5  1.5  CIRCLE  CIRCLE

  • Excelでマクロを使用した削除に関して

    マクロ初心者です。 Excelにて、以下のような表データがあるとします。     A列 B列 C列 D列 E列 … 1行      51  50  52  51    2行  50  a   b   c   d 3行  51  e   f    g   h    4行  52  i    j    k   l この表の中で、A列と1行目の値が同じになる交点となるセルの値"以外"を 削除して以下のように表示させたいのですが、 その方法がわかりません。     A列 B列 C列 D列 E列 … 1行      51  50  52  51    2行  50      b       3行  51  e          h    4行  52          k    単純な行削除・列削除ではないため、 頓挫しています。お知恵を拝借したく、よろしくおねがいします。

  • エクセル(マクロ) 特定セルのファイル間コピペ

    マクロで下記内容の処理を行いたいと思っております。 どのようなコードにすればよいかご教授よろしくお願い致します。 1.A.xlsを開く 2.B.xlsを開く 3.B.xlsの特定セルの値をコピーする。(特定セルを仮にB4、C7、D9とする) 4.A.xlsのC列にあるファイル名リストから「B.xls」というファイル名の入ったセルを検索する。 5.仮に5行目に「B.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE5、F5、G5とする)に3.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 6.B.xlsを閉じる 7.C.xlsを開く 8.C.xlsの特定セルの値をコピーする。(特定セルはB.xlsと同じB4、C7、D9) 9.A.xlsのC列にあるファイル名リストから「C.xls」というファイル名の入ったセルを検索する。 10.仮に7行目に「C.xls」というファイル名があれば、同じ行にある特定列 (行は固定で、例えばE7、F7、G7とする)に8.でコピーしたB4、C7、D9の値を張り付ける。 ※B4はE列、C7はF列、D9はG列に対応するものとする 11.C.xlsを閉じる 12.D.xlsを開く 以下、同じ処理を繰り返す。

  • CSVファイルの取り込みについて

    CSV取り込み方法について 教えていただきたくお願いいたします。 エクセルのマクロ・VBAの組み方について デスクトップ上の000という名前のCSVファイルを、作業しているエクセルファイルのLoadという名前のシートに貼り付けたいと思っています。 CSVファイルはエクセルで開くと1行に11列の項目が展開されています。 貼り付ける項目はこのようになります。 (CSV) →(エクセルのLoadシート) 1列目(A行)→B行へ 2列目   →C行へ 3列目   →D行へ 4列目   →E行へ 5列目   →F行へ 9列目   →G行へ 10列目  →H行へ 11列目  →I行へ (6.7.8列目は使いません) 最後にLoadのシートのA行に”=B&E”とい式を入力したいと思っています。 まだ初心者なので勉強中なのですが、仕事上急遽必要になりましたのでお願いいたします。

  • 品名が変わる所で空白行がある表で在庫数を品名単位で計算したい

    品名が変わる所で空白行がある表で在庫数を品名単位で計算したい 1.CSVファイルがあります。   (データはでたらめに入っています。)画像(1)   A列→半角の1か2   B列→日付   C列→品名   D列→数量 2.これをエクセルで開いて   C列、B列の優先順位で昇順で並べ替えます。画像(2) 3.C列の値が変わった所で空白行を入れます。画像(2)   (品名単位で区分けされました。) 4.A列の値が2の場合D列の値を切取りE列に貼付けます。   画像(3)   D列が(入)   E列が(出)   になります  ここまでのマクロは完成しています。 5.F列の全ての行にD列、E列の結果から計算結果で出た残数を   入れたい。(D,E列が空白の行は不要)画像(4)   D列は上の行のF列の値に加算しその値をFへ   E列は上の行のF列の値から減算しその値をFへ   例:F3=F2+D3-E3    みかんはみかんだけで入出後の残数を、   りんごはりんごだけで入出後の残数を行ごとに入れたい。   かつ計算式は残したくない。 さらに、 CSVファイルは毎日行数が増え1週間で約50,000行になるので このマクロを使い画像3の状態にして毎週金曜日に保存してます。 元のCSVファイルは削除します。 翌週にはまた新たなCSVファイルに翌週のデータがたまります。 先週の分の品名単位の最終行だけをコピーして 翌週のCSVファイルを編集するさいに合流させ、 NO.2の並べ変えの時に品名単位で一番上の行に挿入したいです。 で同じようにNO.5を行いたいです。 画像(4)の場合6,9,14行目を翌週のCSVファイルに合流させる。 (合流だけできればNO.2の作業で品名単位で  必ず一番上になりますので抜取りと合流だけしたい) 品名は1週のファイル内で約5,000種類です。 よって50,0000行が編集で55,000行に増加し その中の5,000行は空白行(品名が変わるたびに挿入されている。) (1)NO.5の画像(3)から画像(4)にするマクロ(計算式の入れ方?)    (空白行には入れない) (2)完成したファイルの品名単位の最終行を抜き出し    次のファイルを作成する時に合流させるマクロ(画像(6)) を教えてください。 

  • 【マクロ】クリックすると空白を含む列を非表示に

    上司にExcelのデータが見づらいと言われて困っています。 下記のようなマクロやVBAを教えていただけないでしょうか? 例えば、 A2のセルをクリックすると、その行(2行目)から空白セルを検索して、そのセルを含む列を非表示にして、データが入っている列だけを表するようなマクロってないでしょうか? (要は、C2とE2が空白セルのとき、A2をクリックして、A/B/D/F~の列だけ表示されるようになるマクロです。 同様に3行目でも、空白セルがB3、C3なら、A3をクリックした時、A/D/E…列だけ表示されて、B・C列が非常時になるような。) 似たような機能があれば、A2クリックでなく別にボタン等を作っても構いません。 ややこしくて、申し訳ございませんが、本当に困っているので、 どうかよろしくお願いいたします。

専門家に質問してみよう