• ベストアンサー
  • 困ってます

VBAで空白セルまで処理を繰り返す方法

お忙しいところ申し訳ありません、よろしければご指導のほど御願いします。 作成環境:エクセル2003です。 文字列として保存されている数値を数値形式に変換したいのですが、マクロ記録で実行した所 Sub test() ' ' test Macro ' Range("BG2").Select ActiveCell.FormulaR1C1 = "1" Range("BG2").Select Selection.Copy Columns("BI:BI").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _ SkipBlanks:=False, Transpose:=False ActiveWindow.SmallScroll Down:=-75 Range("BG2").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "" Range("BG5").Select End Sub 上記のようなコードになり、空白セルも値「0」が入力されはみだしてしまいます。 目的としてはCSVを読み込んで特定の列だけ変換できればと考えています、ところが取り込むCSVデータの行が毎回変動いたしまして範囲を指定して処理を実行するのではなく「空白セルまで処理を繰り返す」方法を模索しております。 先日会社から作業負担を軽減するようにVBAでの依頼を受けましたが、皆目検討つかず苦戦しております。お忙しいところもうしわけありませんが、ご指導のほど御願い申し上げます。

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数2422
  • ありがとう数2

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

  • ベストアンサー
  • 回答No.1

「空白セルまで処理を繰り返す」ということは「開始セルから終了セルの間に空白セルは無い」ということでいいですよね? For Each と End を使用し For Each c in Range([開始セル], [開始セル].End(xlDown).Cells ※変換処理 Next で実現できます。 For Each と End についての詳細はヘルプを参照してください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ご連絡遅くなりまして申し訳ございません。 上記構文を早速試してみます、またFor Each と Endにつきましてもこの機会にヘルプで勉強させていただきます。 素早い回答本当にありがとうございました。

関連するQ&A

  • Excel VBAについて

    以下のコードをFor Nextでまわすには どうしたらよいでしょうか? Sub sample() Range("A2").Select ActiveCell.FormulaR1C1 = "=テスト!R[1]C" Range("A3").Select ActiveCell.FormulaR1C1 = "=テスト!R[3]C" Range("A4").Select ActiveCell.FormulaR1C1 = "=テスト!R[5]C" Range("A5").Select ActiveCell.FormulaR1C1 = "=テスト!R[7]C" Range("A6").Select ActiveCell.FormulaR1C1 = "=テスト!R[9]C" Range("A7").Select ActiveCell.FormulaR1C1 = "=テスト!R[11]C" End Sub

  • 同期の並び替えで、規則的ですが、数が多くて処理に困っています。何かいい方法はないでしょうか?

    同期の並び替えで、規則的ですが、数が多くて処理に困っています。何かいい方法はないでしょうか? 一通り最後までやったのですが、ものすごい数になってしまいました。 下記 Sub Macro1() Sheets("sheet2").Select 'sheet1のA君のデータ(C列の10,14,18,22~90)をsheet2(C列)に同期 Range("C8").Select ActiveCell.FormulaR1C1 = "=sheet1!R[2]C" Range("C9").Select ActiveCell.FormulaR1C1 = "=sheet1!R[5]C" Range("C10").Select ActiveCell.FormulaR1C1 = "=sheet1!R[8]C"      ・      ・      ・   Range("C31").Select ActiveCell.FormulaR1C1 = "=sheet1!R[71]C" 'sheet1のB君のデータ(D列の10,14,18,22~90)をsheet2(E列)に同期 Range("E8").Select ActiveCell.FormulaR1C1 = "=sheet1!R[2]C[-1]" Range("E9").Select ActiveCell.FormulaR1C1 = "=sheet1!R[5]C[-1]" Range("E10").Select ActiveCell.FormulaR1C1 = "=sheet1!R[8]C[-1]"      ・      ・      ・   Range("C31").Select ActiveCell.FormulaR1C1 = "=sheet1!R[71]C[-1]" 'sheet1のC君のデータ(E列の10,14,18,22~90)をsheet2(G列)に同期 Range("G8").Select ActiveCell.FormulaR1C1 = "=sheet1!R[2]C[-2]" Range("G9").Select ActiveCell.FormulaR1C1 = "=sheet1!R[5]C[-2]" Range("G10").Select ActiveCell.FormulaR1C1 = "=sheet1!R[8]C[-2]"      ・      ・      ・   Range("G31").Select ActiveCell.FormulaR1C1 = "=sheet1!R[71]C[-2]"       と続き 最終的には 'sheet1のV君のデータ(X列の10,14,18,22~90)をsheet2(AS列)に同期   Range("AS8").Select    ActiveCell.FormulaR1C1 = "=集計関連!R[2]C[-21]"      ・      ・      ・   Range("AS31").Select    ActiveCell.FormulaR1C1 = "=集計関連!R[71]C[-21]" End Sub と一応規則的に並び替えています。…が、途方もない数になってしまうのですが、何か省略したり…というような方法はないでしょうか? よろしくお願いいたします。

  • VBAでエラーになってしまう

    初心者です。 RangeクラスのSelectメゾットが失敗しました。となります。 このコードは、マクロの記録を行い、そのコードをコマンドボタンのコードにコピーしたものです。 初心者なので、マクロの記録からやりました。 どうか、わかる方がいらっしゃいましたら、教えてください。 Private Sub CommandButton4_Click() Sheets("印刷ページ").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C6").Select ←ここが黄色くなり、エラーになります。 ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D6").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E6").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("B8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("F8").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("B10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("C10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("D10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" Range("E10").Select ActiveCell.FormulaR1C1 = "='鈴木 一郎'!R[2]C" End Sub

  • Excel VBAで表組みしたらデバック発生

    Excel VBAの初心者です。Windows Vistaで Excel2007を使っています。 表をマクロの実行で作成したいと思っています。 何もないエクセルブックより 「開発」→「マクロの記録」→「相対参照」 →「表の作成」→「記録終了」→「相対参照で記録の解除」 →「エクセルマクロ有効ブックで保存」 ところがこのマクロ記録が入ったブックを再度立ち上げ、 表をオールクリアにし、マクロボタンより表作成を実行 させようとすると、次のエラーメッセージがでました。 『実行時エラー'9' インデックスが有効範囲にありません。』 デバックからModule1をみると以下の記述となっていました。 Sub 表組み() ' ' 表組み Macro ' ' ActiveCell.Range("A1:E5").Select Selection.Copy Windows("Book1").Activate ActiveSheet.Paste ActiveCell.Columns("A:A").EntireColumn.Select ActiveCell.Rows("1:1").EntireRow.RowHeight = 11.25 ActiveCell.Rows("1:5").EntireRow.Select Selection.RowHeight = 21.75 ActiveCell.Columns("A:A").EntireColumn.ColumnWidth = 14.88 ActiveCell.Offset(0, 4).Range("A1").Select Application.CutCopyMode = False With Selection .HorizontalAlignment = xlCenter .VerticalAlignment = xlCenter .WrapText = False .Orientation = 0 .AddIndent = False .IndentLevel = 0 .ShrinkToFit = False .ReadingOrder = xlContext .MergeCells = False End With ActiveCell.Offset(1, -3).Range("A1:D4").Select Selection.NumberFormatLocal = "#,##0_ " ActiveCell.Select ActiveCell.FormulaR1C1 = "78000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "102000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "9800" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "65000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "204000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "500" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "86000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "151000" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "10200" ActiveCell.Offset(-2, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(RC[-3]:RC[-1])" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-2]C:R[-1]C)" ActiveCell.Offset(1, 0).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, -3).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(0, 1).Range("A1").Select ActiveCell.FormulaR1C1 = "=SUM(R[-3]C:R[-1]C)" ActiveCell.Offset(-4, -2).Range("A1:D1").Select Selection.AutoFilter End Sub 上から9行目(?)のWindows("Book1").Activateに 黄色い矢印が示され、また行全体が黄色く四角に 覆われていました。 おそらくこの記述に問題があると思いますが、 どんな記述に変えたらいいのか分かりません。 Excel VBAにお詳しい方ご教示願います。 なお、マクロで作成したい図を添付いたします。 参考にしていただければ幸いです。

  • エクセルVBAが書ける方へ

    お世話になります。 下記VBAはB19からB28までのデータをA11:12の横列に貼り付けさせる内容です。 Sub 特価() ' ' 特価 Macro ' ' Range("A11:A12").Select ActiveCell.FormulaR1C1 = "=R[8]C[1]" Range("B11:B12").Select ActiveCell.FormulaR1C1 = "=R[9]C" Range("C11:C12").Select ActiveCell.FormulaR1C1 = "=R[10]C[-1]" Range("F11:F12").Select ActiveCell.FormulaR1C1 = "=R[11]C[-4]" Range("H11:I12").Select ActiveCell.FormulaR1C1 = "=R[12]C[-6]" Range("T11:U12").Select ActiveCell.FormulaR1C1 = "=R[13]C[-18]" Range("X11:Y12").Select ActiveCell.FormulaR1C1 = "=R[14]C[-22]" Range("AD11:AE12").Select ActiveCell.FormulaR1C1 = "=R[15]C[-28]" Range("AN11:AO12").Select ActiveCell.FormulaR1C1 = "=R[16]C[-38]" Range("AW11").Select ActiveCell.FormulaR1C1 = "=R[17]C[-47]" Range("B23").Select End Sub これに下記内容を追加したいのですが教えて下さい。 ・B19からB28のデータは入力後消す。 ・貼り付けたら次に入力する時は下の行(A13:14)に貼り付ける。 ・同様にデータを消してA15:16に貼り付ける。以下、下の行に貼り付けていくようにする。 ・貼り付けたらカーソルはB19を選択した状態にする。 言葉足らずでしたら補足します。 何卒宜しくお願い致します。

  • VBAでVlookupを使って

    いつもお世話になっています。 VBAで現場検索登録シートと言うところに 一覧シートからVlookupを使って 表示させようと思い作りました。 エラーも何もでません。 ただ、表示されるものがちゃんと検索されるものと まったくされないものがあります。 Vlookupはマクロの記録から作ったものです。 原因がわかりません。 よろしくお願い致します。 '検索ボタン Private Sub CommandButton6_Click() '送り方 Range("C4:D4").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,22,FALSE)" Selection.Value = Selection.Value '封筒 Range("C5:D5").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,23,FALSE)" Selection.Value = Selection.Value '得意先名ふりがな Range("C6:F6").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,6,FALSE)" Selection.Value = Selection.Value '得意先名 Range("C7:F8").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,4,FALSE)" Selection.Value = Selection.Value '現場名ふりがな Range("C9:H11").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,9,FALSE)" Selection.Value = Selection.Value '現場名 Range("C10:H11").Select ActiveCell.FormulaR1C1 = "=VLOOKUP(R2C5,一覧!R5C1:R2000C54,7,FALSE)" Selection.Value = Selection.Value End Sub エラーも何もなく、ちゃんと動くことは動きます。 検索結果が、検索コードによって違うのです。 よろしくお願い致します

  • 文字列を連続で置き換え・・・・?

    マクロを記録したんですが手直しして繰り返しと空白のセル内が見つかった場合 繰り返しを終わらせワードパッドにコピーして保存終了させたいんですがわかりません? 誰か教えてください。 ' ' Macro2 Macro ' マクロ記録日 : 2012/4/21 ユーザー名 : cocoro ' ' Range("E:E").Select ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""#"",RC[-4])" Range("F1").Select ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""$"",RC[-4])" Range("G1").Select ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""&"",RC[-4])" Range("E2").Select ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""#"",RC[-4])" Range("F2").Select ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""$"",RC[-4])" Range("G2").Select ActiveCell.FormulaR1C1 = "=SUBSTITUTE(RC[-1],""&"",RC[-4])" Columns("G:G").Select Selection.Copy Columns("H:H").Select Selection.PasteSpecial Paste:=xlPasteValuesAndNumberFormats, Operation:= _ xlNone, SkipBlanks:=False, Transpose:=False Columns("H:H").Select ActiveWindow.SmallScroll Down:=-6 Application.CutCopyMode = False Selection.Copy End Sub

  • 指定したセルに番号をつけていくマクロ

    現在、画像をたくさん貼り付け、カタログを作っていて、番号を入れたらマクロで画像が配置されるというところまでできました。今度は、その、番号を指定したセルに書き込む作業をマクロでできないかと考えています。現在の私が作成したマクロが↓です。 Sub 画像1から60() Range("A4").Select ActiveCell.FormulaR1C1 = "1" Range("C4").Select ActiveCell.FormulaR1C1 = "2" Range("E4").Select ・・・   ActiveCell.FormulaR1C1 = "58" Range("q29").Select ActiveCell.FormulaR1C1 = "59" Range("s29").Select ActiveCell.FormulaR1C1 = "60" End Sub というふうにかなり長く、また、この番号が3000番くらいまであり、簡単にできないものかと試行錯誤しています。 初心者なりに、工夫したのは"600"と表記するのを"=60*10"とし、あとで*10を置換しています。それでも3000番はほど遠く何か方法がありましたら教えてください。

  • 複数ファイルへのVBAの処理について

    最近、ExcelのVBAを使うようになりました。 しかし、以下のような処理を同じフォルダ内の複数のファイルに対して一気にやりたいのですが、わかる方いらっしゃいませんか? 理想としては同じフォルダ内で50個くらいを選択して一気にやりたいのですが・・・。 ******************************* Sub FFT() Columns("A:A").Select Selection.TextToColumns Destination:=Range("A1"), DataType:=xlFixedWidth, _ FieldInfo:=Array(Array(0, 1), Array(18, 1)), TrailingMinusNumbers:=True Range("E8").Select Application.Run "ATPVBAEN.XLA!Fourier", ActiveSheet.Range("$B$1:$B$256"), _ ActiveSheet.Range("$C$1:$C$256"), False, False Columns("C:C").ColumnWidth = 38.38 Range("D1").Select Columns("D:D").ColumnWidth = 20.75 Range("D1").Select ActiveCell.FormulaR1C1 = "=IMABS(RC[-1])" Range("D1").Select Selection.Copy Range("D1:D256").Select ActiveSheet.Paste Range("E6").Select Application.CutCopyMode = False ActiveCell.FormulaR1C1 = "" Range("E7").Select End Sub

  • エクセル マクロ VBA について

    以下はセルB2.C2.D2.E2.F2をアクティブセルから右方向へ入力しています。ここでの入力とは"=" + "セルB2" というものです。一つずつ入力している為マクロが長くなります。短くシンプルなものにしたいです。ご教示お願いします。 ActiveCell.FormulaR1C1 = "=R2C2" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C3" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C4" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C5" ActiveCell.Offset(0, 1).Select ActiveCell.FormulaR1C1 = "=R2C6"