• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでデータ更新をする範囲が変わる場合の対応)

VBAでデータ更新する範囲が変わる場合の対応

このQ&Aのポイント
  • VBAを使用してExcelのデータを切り取り、2列右側のセルに入力されたデータを削除してから貼り付けたい場合、適用範囲が変わる場合の対応方法を教えてください。
  • 毎回の適用範囲の変更に対応したプログラムを作成したい。適用範囲が変わっても、合計欄の上までを毎回範囲指定するようなプログラムが組めるかどうか知りたい。
  • VBAを使ってExcelのデータ更新作業を行っていますが、適用範囲が変わる場合の対応方法が分かりません。適用範囲が変わると合計欄の上までを範囲指定しなければならず、プログラムに組み込む方法がわかりません。お知恵をお貸しください。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

はて?? >K列にあるデータを、毎月I列にコピーしたい。(行は同じで列だけ移動)  : >2列左になります。(K列⇒I列)  : >対応させて、合計数を算出させたい。 いずれも回答したマクロで対応済みの内容です。 >上記内容で、ご理解いただけますでしょうか? 回答のマクロを実際に動かして,動作を確認してみることもしていないのですか? どういう事でしょうか。 #補足1 >一番下の判断材料になる「りんご」以下がどこにあるのか判らない C列やE列は全然間違いで,K列やI列に転記したい「数値」が記入してありますね。 それはいいんですが,肝心の「りんご」から始まって「合計」と書いてあるのはどこ列ですか,と聞いています。 聞かれたから答えるんじゃなくて,回答のマクロをよく読んで,あなたの実際のエクセルに合わせて正しく修正してから実際に動かしてください。 #補足2 >「合計」行はどうしたいのか説明がない そもそも合計行には,マクロでどうこうする以前に合計のSUMの式が記入されていますよね。 回答のマクロを実際に動かしてみれば直ちに判ったことですが,I列のSUMの式は入れ替えた数字によって新しい合計を自動で表示します。

rosso13
質問者

お礼

ありがとうございました。 内容については、まだ理解不十分ですので、 今後勉強いたします。

rosso13
質問者

補足

ご連絡が遅れてしまい、誠に申し訳ございません。  また、ご指摘のとおり「確認もせず」に質問してしまった 非礼につきましても、重ねてお詫び申し上げます。  言い訳をさせていただければ、確認できる環境がなかったのです。  ただし、これはあくまで言い訳。 仰られる通り、まずはご教授いただいた内容に対して実際に作業をしてみて、 その結果から出てくる成果について、改めて検証するすべきです。  申し訳ありませんでした。  さらには、改めてご指摘いただいた >肝心の「りんご」から始まって「合計」と書いてあるのは >どこ列ですか,と聞いています。 という点についても、お伝えできておりませんでした。 失礼いたしました。  場所は、K列になります。 >「合計」行はどうしたいのか説明がない ⇒大変失礼いたしました。ご推察いただいている通り、  合計行にはSUM関数が入っています。  したがって、例えば合計行が20行目になろうが  21行目になろうが、影響を受けることなく  1~20行目、あるいは1~21行目の数値を合計したい。  ということになります。  意味不明な文章であるにも関わらず、根気よくお付き合いいただき、 本当にありがとうございます。深くお礼申し上げます。  この後、ご教授いただいた構文を実際に試させていただきます。  その結果を受け、ベストアンサーにさせていただきます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (1)

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.1

sub macro1()  dim LastRow as long ’一番下の判断材料になる「りんご」以下がどこにあるのか判らない  lastrow = range("A65536").end(xlup).offset(-1).row ’2列右ってどこ?それをどこに貼り付けたいのか書いてない  range("I5:I" & lastrow).value = range("K5:K" & lastrow).value ’「合計」行はどうしたいのか説明がない  raneg("J5:K" & lastrow).clearcontents end sub ご質問で書かれた「イメージ」と「実際のマクロ」も,列の説明が食い違ってて実際どうなってるのかさっぱり不明です。 具体的にどこ番地のセル範囲を「切り取り」,どこ番地に「貼り付け」,どこ番地を「削除」したいと,あなたのエクセルの目に見える姿を人に判るようにご相談に書いてみて下さい。 日本語が不自由なときは,一回ご自分の書いてみた文章を読みながらご自分でその通りにまっさらなエクセルに書き込んでみて,言いたかった事が作成できるか書き漏らしが無いか丁寧に確認してみると良いかもしれませんね。

rosso13
質問者

補足

ご指摘いただき、誠にありがとうございます。 意味不明な文章で、申し訳ありません。 ’一番下の判断材料になる「りんご」以下がどこにあるのか判らない ⇒K列にあるデータを、毎月I列にコピーしたい。 (行は同じで列だけ移動) ’2列右ってどこ?それをどこに貼り付けたいのか書いてない ⇒申し訳ありません。言葉が間違っておりました。2列左になります。(K列⇒I列) ’「合計」行はどうしたいのか説明がない ⇒合計行は、行追加・削除によって対象範囲が増減するのにも 対応させて、合計数を算出させたい。  上記内容で、ご理解いただけますでしょうか? 日本語の使い方が不適当で、ご不便をおかけして申し訳ありません。よろしくお願いいたします。  

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • VBA Selectの省略

    こんばんは、VBAのSelectメソッドの省略について質問させてください。 VBAにおいてSelectを使用すると処理が遅くなると聞いたことがあるので、なるべくSelectを避けるべく以下のVBAを記述しました。 内容は、シート「りんご」のA列~AN列に入っているデータを見出し項目を含めてコピー、そしてSheet1にペーストするというものです。(行数は毎回変化します。) ところが、以下を実行したところ、コピー&ペーストされたのは1行目の見出し項目のみでした。一方、「Range("A1:AN" ~」の前に「Sheets("りんご").Select」を入れたところ、全てのデータをコピー&ペーストすることができました。 この場合は、Selectを使用せずデータをコピー&ペーストすることは不可能なのでしょうか…?!どなたかご回答いただけると嬉しいです、よろしくお願いいたします。  '対象データのコピー&ペースト Sheets("りんご").Range("A1:AN" & Cells(1).CurrentRegion.Rows.Count).Copy Sheets("Sheet1").Paste

  • excel vba DATAの日集計

    excel vba DATAの日集計 いつもお世話になっています。 "DATA"シートのセル"D2"の日付を変えると表の数値が変わるようにしています。 その日毎のデータを"集計"シートの日別の表に飛ぶようにしているのですが、 1日分の転記するセル数が多く、Select Caseで31日分のコードを書くと、あまりにも プロシージャーが大きくなります。(Case1からCase31・・・結果分割してますが) FOR NEXT なのかな~、もっと効率のいい書き方がありましたらよろしくお願いします。 例:"集計"シート1日分は、9行となります。それぞれ"DATA"シートからの転記です。"DATA"シートのF5+F10,G5+G10~AC5+AC10までそれぞれの値を"集計"シートのG5からAD5まで、F6+F12,G6+G12~AC6+AC12までそれぞれの値を"集計"シートのG13からAD13までといった具合です (日の9行はそれぞれ決まったある行とある行の加算です、これが31日分の行があります) Sub macro() Dim myrng As Range Dim c As Range Set myrng = Sheets("DATA").Range("D2") For Each c In myrng Select Case c.Value Case 1 '1行目 Sheets("集計").Range("G5").Value = Sheets("DATA").Range("F5") + Sheets("DATA").Range("F10") | | Sheets("集計").Range("AD5").Value = Sheets("DATA").Range("AC5") + Sheets("DATA").Range("AC10") | | '9行目Sheets("集計").Range("G13").Value = Sheets("DATA").Range("F6") + Sheets("DATA").Range("F12") | | Sheets("集計").Range("AD13").Value = Sheets("DATA").Range("AC6") + Sheets("DATA").Range("AC12")

  • セル範囲指定方法

    VBAにて下記作成中ですが、行き詰ってしまいました。 どなたか、ご教授願います。 Sub 転記ボックス1_Click() Sheets("S").Select Range("N13").Select If ActiveCell.Value <> "" Then Selection.Copy Sheets("H").Select Range("K65536").End(xlUp).Offset(0, 1).Select --->シートH、K列最終行の右隣からL列最終行の範囲を指定 上記指定範囲内全てに、シートS・N13の値を貼付 ElseIf ActiveCell.Value = "" Then Sheets("H").Select Range("K65536").End(xlUp).Offset(0, 1).Select --->シートH、K列最終行の右隣からL列最終行の範囲を指定 上記指定範囲内全てに、”シートS・N13”と入力 End If End Sub --->部分の書き方がわかりません。 よろしくお願いします。

  • 【エクセルVBA】データの振り分けについて。

    エクセルVBAでのデータの振り分けについて教えて下さい。 シート(1)のA列には他のファイルから抽出したデータがあります。 各行のデータの中に、H20年度が含まれている場合はシート(2)のA列に移動させ、H21年度が含まれている場合にはシート(2)のC列に移動させたいと思っています。 以前に sheets(1).Range("H40").Value Like "*○○*" Then sheets(2).Range("H40").Value = 0 sheets(1).Range("G" & myRow).End(xlUp).Offset(1, 0).Value = _ sheets(2).Range("H40").Value こういうものを使ったことがある為これを応用するといいのかなとも思ったのですが、わからなくなってしまい質問させていただきました。 勉強不足ですいません。 教えて頂けないでしょうか。よろしくおねがいします。

  • エクセルVBAについて

    こんにちわ! 今、エクセルでAシートの入力した項目をBのシートへデーターが入力できるようなシステムを以下のようにくみました。 そこでBシートにデーターが入力されるのですが20行まで入力すると入力できないようにしたいのですが、なかなか上手くいきません。 A1からF20まで書式のロックを外しそれ以外のセルは保護をかけたのですがその状態でVBAを使って20行以上入力できませんという感じのエラー表示をしたいのですが、どうすればいいでしょうか? VBAは初心者ですが宜しくお願いします。 Private Sub CommandButton1_Click() Dim row As Integer row = WorksheetFunction.CountA(Sheets("date").Columns(1)) + 1 Sheets("date").Cells(row, 1).Value = Range("B2").Value row = WorksheetFunction.CountA(Sheets("date").Columns(2)) + 1 Sheets("date").Cells(row, 2).Value = Range("B3").Value row = WorksheetFunction.CountA(Sheets("date").Columns(3)) + 1 Sheets("date").Cells(row, 3).Value = Range("B4").Value row = WorksheetFunction.CountA(Sheets("date").Columns(4)) + 1 Sheets("date").Cells(row, 4).Value = Range("B5").Value row = WorksheetFunction.CountA(Sheets("date").Columns(5)) + 1 Sheets("date").Cells(row, 5).Value = Range("B6").Value row = WorksheetFunction.CountA(Sheets("date").Columns(6)) + 1 Sheets("date").Cells(row, 6).Value = Range("B7").Value Sheets("統制入力").Select Range("B17").Select ActiveWindow.SmallScroll Down:=-9 Range("B3:B7").Select Selection.ClearContents Range("B1").Select End Sub

  • VBAについて

    こんばんは、下記のVBAについて質問をさせてください…! シートの名前と特定の列の名前が一致したらデータを引っ張ってくるというVBAなのですが、下記のVBAではもってくるデータはE列でおわりですが、もっと沢山列がある場合で、例えばDA列とかまである場合はどうすればよいのでしょうか…?! まさか「.Range("A" & cellCnt).~」というのを一つ一つ入力するわけではないと思うのですが、記述の方法が分からず困っています。 どなたかご教示いただけると大変助かります…! ' データをとってくるシートの行 Dim dataCnt As Integer ' 貼り付け先のシートの行 Dim cellCnt As Integer cellCnt = 1 For dataCnt = 1 To Sheets("Sheet1").Cells(Rows.Count, 1).End(xlUp).Row If Sheets("Sheet1").Range("L" & dataCnt).Value = Sheets(sheetIdx).Name Then With Worksheets(sheetIdx) .Range("A" & cellCnt).Value = Worksheets("Sheet1").Range("A" & dataCnt).Value .Range("B" & cellCnt).Value = Worksheets("Sheet1").Range("B" & dataCnt).Value .Range("C" & cellCnt).Value = Worksheets("Sheet1").Range("C" & dataCnt).Value .Range("D" & cellCnt).Value = Worksheets("Sheet1").Range("D" & dataCnt).Value .Range("E" & cellCnt).Value = Worksheets("Sheet1").Range("E" & dataCnt).Value End With cellCnt = cellCnt + 1 End If Next

  • excel vbaでリストの範囲設定

    よろしくおねがいします。 Sub 科目自動入力() Sheets("出納帳テンプレート").Select Application.ScreenUpdating = False 'ww列最終行取得 Dim vv As Long ' Sheets("科目シート").Select vv = Sheets("科目シート").Range("v" & Rows.Count).End(xlUp).Row Sheets("出納帳テンプレート").Select 'B列最終行取得 Dim aa As Long '式をフィルダウン aa = Range("B" & Rows.Count).End(xlUp).Row Range("H6").AutoFill Destination:=Range("H6:" & "H" & aa + 100), Type:=xlFillDefault '開始行設定 Dim a As Integer a = 6 kList = Worksheets("科目シート").Range("U2:V127") 'D列「月」欄が空白になるまで繰り返す '一覧に空白が出るか、一致する項目があるまで繰り返す Do Until Cells(a, 4).Value = "" For i = 1 To UBound(kList) If kList(i, 1) = "" Then Exit For '空白だったら抜ける If Cells(a, 7) <> "" Then Exit For 'すでに科目が入力されていれば抜ける If Cells(a, 4).Value Like "*" & kList(i, 1) & "*" Then Cells(a, 7).Value = kList(i, 2) Exit For End If Next i a = a + 1 Loop End sub このようなマクロを組んでいてうまく動作しております。 科目シートにリストがあり 現在はリストをkList = Worksheets("科目シート").Range("U2:V127") と範囲決め打ちしています。 これを範囲可変にしてみようと考えてみたのですが、 kList = Worksheets("科目シート").Range(Cells(2, "U"), Cells(vv, "V")) としても実行時エラー 1004と出てうまくいきません。 ちなみに開始セルは「U2」で変わりません。 終点セルを変数vvで表現したいです。 どうかよろしくお願いします。

  • ExcelVBA データのコピー範囲について

    あけましておめでとうございます。今年もよろしくお願いします。 Sub Test() Dim myTarget As Range, r As Range, f Set myTarget = Sheets("Sheet1"). _    Range("B2", Sheets("Sheet1").Range("B65536").End(xlUp)) For Each r In myTarget  Set f = Sheets("Sheet2").Columns(1). _    Find(r.Value, Sheets("Sheet2").Range("A1"), Lookat:=xlWhole)  If Not f Is Nothing Then    If r.Offset(0, 3).Value <> f.Offset(0, 3).Value Then      f.Resize(1, 4).Copy Destination:= _      Sheets("Sheet3").Range("A65536").End(xlUp).Offset(1, 0)    End If  End If Next r End Sub 前回の質問で教えていただいたコードなのですが、現時点では、B列のデータを元にして二つのSheetのデータを比較して別Sheetへコピーしているのですが、そのときに、B列以降の(たとえば、B列からX列まで)データはコピーできますが、A列もコピーしたい時はどうすればよいのかで、悩んでいます。どの様に変更すればよいのでしょうか?

  • エクセルマクロ:範囲の選択

    マクロで範囲を指定したいのですが、 dataと名づけたシートA1に例えば8という値、A2に20という値があります。 この数字は他のセルから参照する計算式になっていて再計算をするたびに変わります。 この時、C8:E20の範囲を指定したいのですが、やみくもに Dim c As Integer c = 3 'C列 Range(Cells(Sheets("data").Range("A1").Value, c), Cells(Sheets("data").Range("A2").Value, c + 2)).Select Selection.Copy などと書いてみたのですが、うまくいきません。 どのように記述すればよいか、教えてください、宜しくお願いいたします。

  • 【エクセル VBA マクロ】

    シートAの日付を確認してデータをコピーし、シートBの該当する日付の列に売り上げを貼り付けるというマクロを組みたいです。 他の方達のを参考にしながら作成しましたが、実行をすると「エラー1004」 Matcheプロパティが見つからないというエラーが出ます。 どなたか原因と対策を教えてください。 Sub() Sheets("シートA").Select Range("J3:J10000").Select ※売上データ Selection.Copy 検査値 = Range("R2").Value ※日付データ Sheets("シートB").Select Set 検索範囲 = Range("J4:AN4") ※日付データ 列 = Application.WorksheetFunction.Match(検査値, 検索範囲, 0) Cells("4, 9" + 列).Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone,SkipBlanks:False, Transpose:=True End Sub

専門家に質問してみよう