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

このQ&Aのポイント
  • VBAで空白セルまで処理を繰り返す方法を教えてください。
  • エクセル2003で保存されている数値を数値形式に変換したいが、マクロ記録ではうまくいかない。CSVデータの範囲が毎回変動しているため、空白セルまで処理を繰り返す方法を模索している。
  • VBAでCSVデータを読み込み、特定の列だけ変換する方法を教えてください。
回答を見る
  • ベストアンサー

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での依頼を受けましたが、皆目検討つかず苦戦しております。お忙しいところもうしわけありませんが、ご指導のほど御願い申し上げます。

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

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

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

Kurumatrou
質問者

お礼

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

関連するQ&A

  • エクセルVBAで空白セルを削除する方法

    みなさん教えてください。 今エクセルVBAで、下記のようにのA列に空白セルがある場合にそのセルを削除し、 空白セルが無い場合何もしないと言うマクロを作っています(下記のように自動記録し ました)。 しかし、作成したマクロは、下記のようにA列に空白セルがない場合はエラーが出てし まいます。 空白セルが無い場合エラーが出ない方法を教えて頂けないでしょうか。 よろしくお願いします。 <マクロ> Sub Macro1() Columns("A:A").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Selection.SpecialCells(xlCellTypeBlanks).Select Application.CutCopyMode = False Selection.Delete Shift:=xlUp End Sub <データ> A --------- 1 2 1 1 1 3 4 ・ ・ ・ (以降約300行続きます)

  • 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 エラーも何もなく、ちゃんと動くことは動きます。 検索結果が、検索コードによって違うのです。 よろしくお願い致します

  • 複数ファイルへの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 セルの空白から、行挿入するしないを変更する

    とある表作成に下記のようなコマンドボタンを作成しましたが、 1回目は良いのですが、修正が発生し、2回目以降で再計算をする場合、 更にC列が挿入されてしまい、表が崩れてしまいます。 (Sheet1に計算表、Sheet2にデータベースという形にしています。) その為、2回目以降はSheet2のC列を挿入しないようにしたいのです。 1つの案として列挿入後、C1セルは絶えず空白のままとなり、 (行挿入前は文字が入っています)挿入後はC1セルに文字を 入力することはない為、そこから判断して、CommandButton1を押した後、 C列を挿入するしないの作業を変えることは可能でしょうか? もし出来なければ、C1セルが空白の場合、 ”Sheet2のC行を削除後、再度実施して下さい”みたいな メッセージボックスを出す形でもOKです。 よろしくお願いいたします。 ※因みに下記は、分からないながらもマクロの記録を使って試行錯誤しながら 自己作成したものですので、不要な文が入っているかも知れません。 すみませんがよろしくお願いいたします。 ーーーーーーーーーーーーーーーーーーーーーーーーーーー Private Sub CommandButton1_Click() Application.ScreenUpdating = False Sheet2.Select Sheet2.Columns("C:C").Select Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove Sheet2.Range("C2").Select ActiveCell.FormulaR1C1 = "=RC[-1]-RC[2]" Application.CutCopyMode = False Sheet2.Range("C2").Copy Sheet2.Range("C2:C20000").PasteSpecial Sheet2.Range("C2").Select Sheet1.Select Range("E4").Select Application.ScreenUpdating = True 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

  • 【ExcelVBA】空白ではないセルを選択する

    こちらで、Sheetをcsv出力する際、 空白のセルを区切る「,」が入ってしまう件を質問いたしました。 http://okwave.jp/qa/q8886514.html 計算結果が空白でも、そのセルは「文字数が0の文字列としてデータ」がある状態 という事は理解ができました。 そこで、A~C列の「文字数が0の文字列」ではないセルを選択して、 その範囲をSheet2にペースト、そのSheet2をcsvで保存すればよいと思いました。 この部分をマクロに組み込みたいのですが、 A~B列で「文字数が0の文字列」ではないセルを選択という指示をする部分がわかりません。 以下は、マクロの記録を使って作成しました。 Sub csv送信用() ' ' csv送信用 Macro ' ' Sheets("Sheet2").Select Selection.QueryTable.Delete Selection.ClearContents With ActiveSheet.QueryTables.Add(Connection:="TEXT;C:\Documents and Settings\***\My Documents\***.csv" _ , Destination:=Range("$A$1")) .Name = "***_2" .FieldNames = True .RowNumbers = False .FillAdjacentFormulas = False .PreserveFormatting = True .RefreshOnFileOpen = False .RefreshStyle = xlInsertDeleteCells .SavePassword = False .SaveData = True .AdjustColumnWidth = True .RefreshPeriod = 0 .TextFilePromptOnRefresh = False .TextFilePlatform = 932 .TextFileStartRow = 1 .TextFileParseType = xlDelimited .TextFileTextQualifier = xlTextQualifierDoubleQuote .TextFileConsecutiveDelimiter = False .TextFileTabDelimiter = True .TextFileSemicolonDelimiter = False .TextFileCommaDelimiter = True .TextFileSpaceDelimiter = False .TextFileColumnDataTypes = Array(2, 2, 2, 2, 2, 2, 2, 2, 2) .TextFileTrailingMinusNumbers = True .Refresh BackgroundQuery:=False End With Sheets("Sheet1").Select Columns("A:C").Select Selection.Copy Sheets("csv_copy").Select ActiveSheet.Paste Application.DisplayAlerts = False ActiveWorkbook.SaveAs Filename:="C:\Documents and Settings\***\My Documents\csv_copy.csv", FileFormat:= _ xlCSV, CreateBackup:=False Application.DisplayAlerts = True Sheets("Sheet1").Select End Sub この Columns("A:C").Select Selection.Copy の、部分を「A~B列で「文字数が0の文字列」ではないセルを選択」してコピーにするとよいのだと思うのですが、 どのように書いたらよいでしょうか。 Excel2007です。 宜しくお願いいたします。

  • 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の初心者です。マクロを使った同一処理を各列ブロック(3列が1単位)毎に 繰り返して列方向に多数のブロックまで行うVBAはどのようなものになるのでしょうか。 具体的には添付図のような表で、B2店について品名・数量・金額を、4行目~10行目まで、金額の多い順に並べかえた後、金額の合計をセルD2 に記入するマクロ(この記述は下記のようになりましたが)、この処理をE5店、H8店……と3列ずつ例えば20ブロック処理するプログラムはどのようにしたらよいでしょうか(20ブロック目の列番号はBG,BH,BIです)。どなたか教えていただけないでしょうか。 Sub 多い順と合計() Range("B3:D10").Select Selection.Sort Key1:=Range("D4"), Order1:=xlDescending, Header:=xlGuess, _ OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod _ :=xlPinYin Range("D2").Select ActiveCell.FormulaR1C1 = "=SUM(R[2]C:R[18]C)" Range("B2").Select 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で指定範囲内の空白セルを左詰めで一括削除したいのですが

    エクセルで作成した表中に測定結果を集約し、管理しております。 測定を行った際に得られる数値を項目毎に対象列のセルへ集積しているのですが、 測定を行っていない項目のセルは空白となるため、空白セルを左詰めで一括削除したく望んでおります。 下記のようにマクロの記録を使用してコードを取得し、実行してみたのですが、エラーになってしまいます。 Private Sub CommandButton1_Click() Sheets("A").Select Range("B:AH").Select Selection.SpecialCells(xlCellTypeBlanks).Select Selection.Delete Shift:=xlToLeft Range("A1").Select End Sub 対象範囲(列)はB列からAH列としておりますが、測定項目が増えると記載列も増えますので、 範囲を柔軟に変更出来るような方法で希望しております。 お手数ですがご教授いただけませんでしょうか? 宜しくお願い致します。

専門家に質問してみよう