エクセルマクロでデータがある範囲を判定する方法

このQ&Aのポイント
  • エクセル2010を使ってデータがある範囲を判定するマクロを作成したいです。
  • 現在、指定された範囲をコピーするマクロを作成していますが、実際のデータは行単位で増減するため、DM列からDO列のデータがある行を判定し、全て選択してコピーする方法を教えてください。
  • DM列にデータがあれば必ずDO列までデータが存在するため、行単位で増減する場合でも問題ありません。
回答を見る
  • ベストアンサー

エクセル マクロ データがある範囲を判定

エクセル2010を使っています。 以下の様なマクロでコピーペーストを行っています。 Sub ボタン5_Click() Range("DM1:DO78952").Select Selection.Copy Windows("book2.xlsm").Activate Range("A1").Select ActiveSheet.Paste Windows("book1.xlsm").Activate End Sub このマクロでは範囲が指定されていますが、実際のデータは行単位で増減しますので、これを DM~DO列のデータがある行を判定し、全て選択しコピーするにはどうすれば良いでしょうか? (増減は必ず行単位、DM列にデータがあれば、必ずDO列まで有ります。) 詳しい方、よろしくお願い致します。

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

  • ベストアンサー
  • tom04
  • ベストアンサー率49% (2537/5117)
回答No.1

こんばんは! >(増減は必ず行単位、DM列にデータがあれば、必ずDO列まで有ります。) というコトですと、とりあえずDM列で最終行を取得しその範囲をコピー&ペーストしてみてはどうでしょうか? Dim endRow As Long endRow = Cells(Rows.Count, "DM").End(xlUp).Row ActiveSheet.Range(Cells(1, "DM"), Cells(endRow, "DO")).Copy といった感じで・・・m(_ _)m

gekikaraou
質問者

お礼

回答ありがとうございます。 この様に別けて考えればよいのですね、助かりました!

関連するQ&A

  • エクセルでマクロを組み始めたばかりのため、皆様にご

    エクセルでマクロを組み始めたばかりのため、皆様にご教授頂ければと思います。 今開いているシートに転送ボタンを作成します。このシートのセルC4からC27までデータ(言葉や数値など)を、ボタンを押して、デスクトップ内の「マクロ」というブック、「記録用紙」名のシートにB列に横へ(B4,C4…)、毎日データ転送しようと思います(4行目,5行目…)。 その際、転送先はシート保護をしておきたいのです。 Option Explicit Private Sub CommandButton1_Click() Call Macro1 End Sub Sub Macro1() Range(”C4:C27”).Select Selection.Copy Workbook.Open ”C:¥Users¥user¥Desktop¥マクロ.xlsm” Workbooks(”マクロ.xlsm”).Activate Sheets(”記録用紙”).Select Range(”B65536”).End(xlup).Offset(1).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _:=False, Transpose:=True Windows(”マクロ.xlsm”).Activate End Sub この様なマクロを組んでみました。転送ボタンを押しても、「保護の為、読み取り専用」というエラーメッセージが出て途中で止まってしまいます。 どの様に修正すれば良いのでしょうか?お手数をおかけして申し訳ございませんが、よろしくお願いします。

  • エクセル マクロ for next 繰り返し

     マクロは初心者です。  以下のコピーペーストを  for ~ next で3回繰り返すコードを書くには?  変数  処理  回数指定  次に  「データ範囲の指定とコピー貼り付け」になります。   ご教示願えれば幸甚に存じます。    ◎同じ処理を二回例示します。  Range("D2").Select Windows("新規_1502.csv").Activate Range("C2:F" & 最終行).Select  Selection.Copy Windows("sinki 1502_新規.xlsm").Activate ActiveSheet.Paste ActiveSheet.Paste Range("K2").Select Windows("新規_1502.csv").Activate Range("G2:J" & 最終行).Select Selection.Copy Windows("sinki 1502_新規.xlsm").Activate ActiveSheet.Paste ActiveSheet.Paste

  • EXCELのマクロがわかりません・・・

    現在、A列にデータが並んでいるのですが、 これを7つ区切り(例:A1~A7、A15~A21)にして、 別シートに用意した表に行列を入れ替えて、 貼り付けるマクロを作っているのですが、 なにぶんVBは素人ですので、よくわかりません。 今作ろうとしているマクロは、 「元データ」セルのA1からA7までをコピーして、 「作成データ」セルのB2を起点として、 コピーした内容の行列入れ替えを行い貼り付け、 以後、「元データ」のコピー範囲を7つづつ 下にずらし、「作成データ」の貼り付け起点を 1つづつ下にずらして、「元データ」のA列の 最後までくりかえすものです。 必ず「Range」文で引っかかってしまうのですが、 何か構文的におかしいでしょうか? かなり急ぎですので、 わかる方、よろしくお願いしますっ!! 下に、作成したマクロを貼り付けます。 Sub Macro3() ' ' Macro3 Macro ' マクロ記録日 : 2005/12/5 ユーザー名 : *** Worksheets("元データ").Activate 開始行 = -6 終了行 = 0 ペースト行 = 0 Do 開始行 = 開始行 + 7 終了行 = 終了行 + 7 ペースト行 = ペースト行 + 1 開始セル番号 = "A" & 開始行 終了セル番号 = "A" & 終了行 ペーストセル番号 = "B" & ペースト行 Range("開始セル番号:終了セル番号").Select Selection.Copy Sheets("作成データ").Select Range(ペーストセル番号).Select Selection.PasteSpecial Paste:=xlAll, Operation:=xlNone, SkipBlanks:=False _ , Transpose:=True Loop End Sub

  • Excellマクロ Cellsの範囲選択について

    エクセル2003についてお尋ねします。 A1には行番号にあたる変数が表示されるようになっています。 その変数によって選択するセルの範囲が変わるようにすることが目的でした。 「A1の行番号の5~10列目を選択する」というマクロを 下記のような記述を行いましたが、※のところでエラーが出てしまい、問題がわからずにおります。 お手数ですが解決策をご教授ください。 Sub マクロ1() Dim j As Integer j = Range("A1") Worksheets("Sheet1").Activate Range(Cells(j, 5), Cells(j, 10)).Select ←※ End Sub よろしくお願いいたします。

  • EXCELマクロについて

    条件 シート名提供データE列の3行目からデータが入っています。    ブランク以外のデータをコピーしてシート名WorkのC列の2行目から貼り付けたいので下記のマクロを書いていますがおかしい所 はないのでしょうか。教えてください。 いまいちCellsの使い方がわかりません。 出来たら下記の意味を教えてください。 brank = Worksheets("提供データ").Cells(gyo, 5).Text Range(Cells(3, 5), Cells(gyo, 5)).Select Sub 貼付() Dim gyo, brank Sheets("提供データ").Select Range("e3").Select gyo = 2 Do gyo = gyo + 1 brank = Worksheets("提供データ").Cells(gyo, 5).Text Loop While brank <> "" Range(Cells(3, 5), Cells(gyo, 5)).Select Selection.Copy Sheets("work").Select Range("c2").Select Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=False End Sub

  • excelマクロについて

    下記のマクロを実行したときに、Sheets("提供データ")のD列の7327行目はブランクなのに、Sheets("jyoken")のa列の7326行目に計算式がコーピされるのはなぜでしょうか。 ちなみにSheets("jyoken")のa列の2行目に=提供データ!D3という計算式 が入っています。 Sheets("jyoken")のa列の7326行目には計算式がコーピしないようにするにはどこを修正すればよいのでしょうか教えてください。 Sub 式複写() Dim gyo, burank ActiveWorkbook.PrecisionAsDisplayed = False Sheets("提供データ").Select Range("a2").Select gyo = 2 burank = "" Do gyo = gyo + 1 burank = Worksheets("提供データ").Cells(gyo, 4).Text Loop While burank <> "" ' Sheets("jyoken").Select Range("A2").Select Selection.Copy Range(Cells(3, 1), Cells(gyo - 1, 1)).Select '複写先 ActiveSheet.Paste End Sub

  • 「コピペ」するExcelマクロで困っています。

     エクセルのマクロの自動作成ツールで、下のようなコピペのマクロを作ってみました。 シートをコピーして貼り付けるところまでは動きますが、その後に用済みの「ABCD.csv」を閉るところで、メッセージ画面が出て止まってしまいます。  良く見てみると、その後に開く「はい」「いいえ」「キャンセル」の選択画面(参考画面)の指示が自動では記入出来ないようで、色々調べてみましたがどうもうまくいきません。 Windows("ABCD.csv").Activate   Range("A1:B10").Select Selection.Copy Windows("DATA.xlsm").Activate   Range("A1").Select ActiveSheet.Paste   Windows("ABCD.csv").Activate ActiveWorkbook.Saved = False ActiveWindow.Close  この画面で、「いいえ」を選択するマクロを、誰か教えてください。 マクロを始めてまだ一週間なのでまったくわからず困っています、よろしくお願いします。

  • エクセルマクロで「今作業をしているファイルを指定す

    る方法について」 上書きのマクロについて質問をしましてxls88さんからお答えいただき無事うまくいきました。そこで次の場合どうすればよういかご教授お願いします。 Sub 全体名簿へ2組() ' ' 全体名簿へ2組 Macro ' ' Windows("全体名簿.xlsm").Activate Sheets("★生徒名簿").Select If MsgBox("B列で前のクラスの生徒の次のセルを選択していますか?", vbYesNo) = vbYes Then Range("B" & ActiveCell.Row, "n" & Range("B65536").End(xlUp).Row).ClearContents Else: Worksheets("★生徒名簿").Activate Windows("2組.xlsm").Activate Sheets("★生徒名簿").Select 開始 = Range("r3").Value 終了 = Range("s3").Value Range("B" & 開始 + 1 & ":n" & 終了 + 1).Select Selection.Copy Windows("全体名簿.xlsm").Activate Sheets("★生徒名簿").Select ActiveSheet.Paste End If End Sub 上記の文で「Windows("2組.xlsm").Activate」でここを今作業しているファイル名を使わずに「2組」と特定しない方法です。なぜかというと全体名簿のフィルをコピーして1組から3組までのクラスに分けるからです。2組と特定してしまうと1,3組は使えなくなってしまうからです。何かいい方法があったらお願いします。

  • エクセルマクロで上書きして貼り付けの方法は

    エクセルのマクロでコピーして貼り付けする場合、貼り付けするセルに何か入力されているとその次の行に飛んで貼り付けしてしまいます。 何か入力されていても上書きで貼り付けする方法を教えてください。次のマクロを参考にお願いします。 Sub 全体名簿へ2組() ' ' 全体名簿へ2組 Macro ' ' 開始 = Range("r3").Value 終了 = Range("s3").Value Range("B" & 開始 + 1 & ":n" & 終了 + 1).Select Selection.Copy Windows("全体名簿.xlsm").Activate Sheets("★名簿").Select Range("B65536").End(xlUp).Offset(1).Select ActiveSheet.Paste End Sub このActiveSheet.Pasteを変えるとできるのかその方法がわかりません。 また,貼り付けする前に選んだセル以降の行をクリアーにしてから、貼り付けすればできますがその範囲の指定の仕方はどうすればいいのでしょうか。マクロの文も教えていただきたいです。

  • エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです

    エクセルのマクロで各Sheetのデータを複数コピー&ペーストしたいです 1つのエクセルファイルの中に複数のSheetがあります。 各Sheetの4行目以降(5行目から)にデータのあるA列~O列をコピーしていって、 挿入-ワークシート(Sheet1という名前で構わない)に全てを順番にコピーしていきたいです。 ”新しいマクロの記録”で下記のように作成したのですが、  ・5行目からデータのあるA列~O列をコピーしていく   ・存在する全てのSheetから上記の作業をする というマクロの書き方が分かりません。 恐れ入りますがお時間ある方で上記の内容をご理解頂ける方がいましたらアドバイス頂ければ非常に助かります。 Sub Macro1() Sheets.Add Sheets("ER10(zy)").Select Rows("5:8").Select Selection.Copy Sheets("Sheet1").Select ActiveSheet.Paste Sheets("ER10(cx)").Select Rows("5:9").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A5").Select ActiveSheet.Paste Sheets("ER10(zht)").Select Rows("5:13").Select Application.CutCopyMode = False Selection.Copy Sheets("Sheet1").Select Range("A10").Select ActiveSheet.Paste End Sub

専門家に質問してみよう