Excel VBAで任意の行数・列数のデータを合体する方法

このQ&Aのポイント
  • Excel VBAを使用して、Sheet1とSheet2のデータを続けてくっつけ、Sheet3に連続した状態で保持する方法を教えてください。
  • Sheet1のデータとSheet2のデータを値だけコピーして貼り付け、Sheet3に連続したデータを作成する方法をExcel VBAでお教えください。
  • Excel VBAで、Sheet1のデータの最終行にSheet2のデータを連結し、Sheet3に連続したデータを作成する方法を教えてください。
回答を見る
  • ベストアンサー

Excel 任意の行数・列数のデータを合体VBA

VBAで、Sheet1のデータの最終行に Sheet2の同じ並びのデータを続けてくっつけ、 Sheet3に(Sheet1とSheet2のデータが)連続した状態をつくる場合のVBAの書き方を教えてください。 ちょうどSheet1のブルーの範囲(ただし最終行はn行=データは様々で最終行は不特定だが最終行の下にはもうデータはない、最終m列の右にはまだデータが膨大にあるが、今回はA~m列(ここではA~AX列と指定可能)をコピーしたい) に Sheet2の黄色い範囲(ただし最終行はn行=データそれぞれで不特定だが最終行の下にはもうデータはない、最終m列はSheet1と同じ構成=A~AX列) をくっつけたい。 ・アウトプットはSheet3。 (Sheet1とSheet2はいじらずそのまま残す) ・コピーして貼り付ける(複写する)のは、値だけ (罫線とか計算式は不要) です。 よろしくお願いします。

  • ketae
  • お礼率85% (292/340)

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

  • ベストアンサー
  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.6

>1| With Sheets("Sheet1") >2|Sheets("Sheet1").Range("A1:AX" & .Range("A" & RowS.Count).End(xlUp).Row).Copy >3|End With >の部分ですが、「With|」で始まり、「End With」で終わる(くくりが終わる)という見方で理解しているのですが、 >Q1)この3行の真ん中の行(2行目)だけでは動作しない >(やりたいことが起こらない)理由が理解できません。  まず .Range("A" & RowS.Count).End(xlUp).Row の部分の頭には「.」が付いていますが、その更に前には Sheets("Sheet1") というシートを指定する構文が付いていない事に注意して下さい。  これはWithの中で Sheets("Sheet1") という構文が既に指定されているので、 Sheets("Sheet1").Range("A" & RowS.Count).End(xlUp).Row という構文を記述する場合、 Sheets("Sheet1") の部分を省略して記述する事が出来る様になっているからです。  ここで、 With Sheets("Sheet1") と End With を記述せずに、 Sheets("Sheet1").Range("A1:AX" & .Range("A" & RowS.Count).End(xlUp).Row).Copy だけにしてしまいますと、 .Range("A" & RowS.Count).End(xlUp).Row の部分でシートを指定していない事になりますから、セル範囲を指定した事にはならないためエラーとなってしまいます。  それならば Sheets("Sheet1").Range("A1:AX" & Range("A" & RowS.Count).End(xlUp).Row).Copy の様に Range("A" & RowS.Count).End(xlUp).Row の頭に「.」を付けなければ良いかと言いますと、そうは行きません。  Rangeの前に「.」を付けなければ確かにエラーとはなりませんが、その場合 Sheets("Sheet1").Range("A" & RowS.Count).End(xlUp).Row という意味にはならず、 Activesheet.Range("A" & RowS.Count).End(xlUp).Row という意味になってしまいますので、Sheet1以外のシート上でマクロを起動させた際に、その時開いていたシートのA列の最終行の行番号を返す事になり、Sheet1のA列の最終行の行番号を求めた事にはなりません。  ですから、 .Range("A" & RowS.Count).End(xlUp).Row という記述の仕方をする場合には、 With Sheets("Sheet1") と End With が必要になる訳です。  尚、With~End With は単に構文の記述を省略する事が出来る様にしているだけですから、 Sheets("Sheet1").Range("A1:AX" & Sheets("Sheet1").Range("A" & RowS.Count).End(xlUp).Row).Copy という記述の仕方をすれば1行だけで済ます事も出来ますが、 Sheets("Sheet1") という記述が2回も出て来るのは煩雑なため、Withを使って省略した記述の仕方をしている訳です。  省略した記述の仕方をするというのであれば、 With Sheets("Sheet1") .Range("A1:AX" & .Range("A" & RowS.Count).End(xlUp).Row).Copy End With という記述にすべき所であり、実際、当初はそうしていたのですが、他の所で生じたバグを潰すために構文のあちこちをいじっていた際に、一旦、Sheets("Sheet1")を付けた形で記述した事があり、それを後で元に戻すのを忘れておりました。 >Q2)xlPasteValuesAndNumberFormats」とValueだけでなく、NumberFormatsと宣言してるのはなぜでしょうか。数字も値(Value)は数字そのものとして処理されると考えていましたので、理由が知りたいと思いました(データに日付は出現しません)  そう申されましても、御質問内容には「・・・・」で表現されている箇所もあり、そこにどんな表示形式が使われているのかといった事に関しては何も説明が御座いませんでしたので、「日付」以外にも「時刻」や「郵便番号」、「電話番号」、「¥マーク付きの金額」等が含まれている可能性も考えられましたし、例え単なる数値だけであったとしましても、「3桁ごとに『,』を付ける」、「表示される小数点以下の桁数に指定がある」、「負の数を赤文字で表示する」、「負の数を▲付きで表示する」、「指数表示にする」等々の様々なパターンも考えられましたので、トラブルや二度手間の元となる恐れを避けるために値と表示形式が反映される様にして居ります。 >Q3) PasteSpecial Paste:=xlPasteValues >のところで、イコールだけのPaste=xlPasteValues >ではなく、VBAが「:=」という記述の型を使っている理由をお知りでしたら教えてください。  私自身はその事に対して何の不満御座いませんでしたので、これまでその様な仕様となっている理由を確認した事は御座いません。  只、 .Paste Destination:=Range(セルAddress) という構文もある以上、単純にPaste=xlPasteValuesとしてしまったのでは、PasteSpecialのパラメーターなのか、それともPasteメソッドの書き間違えなのか判り難いと思います。  私は「:」を付けた方がパラメーターである事が判りやすくて良いと思っております。

ketae
質問者

お礼

よい記述をありがとうございます。 アマゾンで買う分厚い本だと、コードばかりで文法の解説がなく、今日大きな書店に立ち寄ったら、ステートメントの記述に関する本があり、回答者さんの説明と合わせて、効率をよくするやり方の、Withステートメントであることがようやくわかりました。 また、あとにつづく「.Range」のような「.」で始まる行の意味もわかりました。 大変勉強になりました。 ちなみにわたしはマクロをマスターするポジションではないのですが、マクロやプログラミングができる人を外部(外注)に頼っており、契約にない処理だとなんでもかんでも頼めず、また下請法のしばりもあるため、わたしの業務で必要な処理だけ自分でできるよう、ここで勉強させていただいています。 どうもありがとうございました。

ketae
質問者

補足

仕事から帰って読みながら研究中です。 理解を深めますので、しばしお待ちください。 ご丁寧な対応ありがとうございます。

その他の回答 (5)

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

結局2つとも同じ質問なので、一緒に回答します。 r1はたとえばその次のステップで ’その範囲を転記する  worksheets("Sheet3").range("A1:AX" & r1).value _  = worksheets("Sheet1").range("A1:AX" & r1).value A1からAX列のr1行のセルまでのセル範囲を取得するために利用しています。 つまりこの構文では、変数r1には「行番号」という数字が入ってなきゃならないワケです。 なので マクロ: r1 = worksheets("Sheet1").range("A65536").end(xlup).row 意味: 変数r1に代入しなさい = ワークシート(シート1)の.A65536セルの.そこから上にジャンプした先のセルの.行番号を。 勿論あなたが希望するなら  dim h as range ’上向きジャンプした先のセルを取得する  set h = worksheets("Sheet1").range("A65536").end(xlup) ’それを使って転記する  worksheets("Sheet3").range("A1:AX" & h.row).value _  = worksheets("Sheet1").range(worksheets("Sheet1").range("A1"), h).value みたいなこともやればできますが、明らかに回りくどいというかメンドクサイ事をしてます。 >細かい点ですが説明いただけたらと思います。 今はアナタがご質問された、「これこれの転記を解決する」ためのご相談です。 あなたのエクセルVBAのなんでも相談室じゃありませんし、回答者もいつまでもいつまでもダラダラ追加ご質問にお付き合いする義理はありません。 元のご相談が解決したらこのご相談は解決で閉じて、新しい疑問点は詳しい状況を添えて、新しいご質問として別途投稿し直して下さい。

ketae
質問者

お礼

解決していないのでお伺いしたのですが、ご迷惑のようですし、義理ももちろんありませんのでもうお聞きしません。 ありがとうございました。

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

sub macro1()  dim r1 as long  dim r2 as long ’A列を使ってシート1の最終行を取得する  r1 = worksheets("Sheet1").range("A65536").end(xlup).row ’その範囲を転記する  worksheets("Sheet3").range("A1:AX" & r1).value _  = worksheets("Sheet1").range("A1:AX" & r1).value ’A列を使ってシート2の最終行を取得する  r2 = worksheets("Sheet2").range("A65536").end(xlup).row ’その範囲を、既に貼り付けた下に転記する  worksheets("Sheet3").range("A2:AX" & r2).offset(r1 - 1, 0).value _  = worksheets("Sheet2").range("A2:AX" & r2).value end sub 再掲: >転記したい具体的なセル範囲を取得(指定)して、どんどんと転記する アナタがご自分でヤリタイと仰っていた事は何でしたか? >Sheet1のブルーの範囲(ただし最終行はn行=データは様々で最終行は不特定…をコピーしたい シート1の対象範囲は具体的に、A1セルから、横はAX列まで、そして下は使用してる最終行まで、ですね。 なので「使用している最終行」が、いまマクロを実行したこの瞬間に具体的に何行まであるのか、200行とか1000行まであるとか、調べてその範囲をコピー(転記)すればイイ訳です。 じゃぁ具体的にどうやって「(シート1やシート2に)いま何行までデータが記入されている」のか調べれば良いかと言えば、やり方は沢山たくさんありますが、たとえば 方法1:A1セルからCtrl+↓で下向けにジャンプして、辿り着いた行まである 方法2:A列のずっと下のセル(例えばA65536セル)からCtrl+↑で上向けにジャンプして、辿り着いた行まである といった手順が思いつきます。 それぞれに「失敗するリスク」もあるので、あなたの実際のエクセルの状況に照らしてもっともリスクの小さい方法を選び、最終行を取得します。今回はこの中から、一般に失敗の少ない方法2を採用したという事です。 #方法1が失敗するケース  ●たまたま1行目しかデータが記入されていない  ●リストの途中に空白セルが紛れている  ●他の列とは行数が違う #方法2が失敗するケース  ●たまたまシートの一番下のセルまでみっちりデータが埋まっている  ●リストの下端より下に、ゴミデータが実は紛れていてCtrl+↑がそこで止まる  ●他の列とは行数が違う  ●最終行より上のセルからジャンプすると失敗する #他の方法の例(同様にそれぞれ異なる失敗のリスクがあります)  ○A列じゃなくより信頼できる列を使い、同様にCtrl+ジャンプで最終行を取得する  ○シートの最終セル(Ctrl+Endでジャンプするセル)を使う  ○セルのジャンプじゃなく、たとえばCOUNTA(A:A)といった関数で計算し行数を取得する  ○A列だけじゃなく考えられる全部の列について、イチイチCtrl+ジャンプで最終行を調べて廻り最大値を探す  etc,etc

ketae
質問者

お礼

なるほど理由がわかりました。 はい、別質問であったように、A列は空行がある可能性があるため、A列がひっかかっていました。

ketae
質問者

補足

やりたいデータ処理はできるようになったのですが、理解のために時間がありましたら、次の行の部分の解説をお願いします。 r1 = worksheets("Sheet1").range("A65536").end(xlup).row この最後の「.end(xlup).row」で、end(xlup)でCtrl+↑の動作に.rowがついている意味(とうかVBA上の概念)を、細かい点ですが説明いただけたらと思います。 まず現状認識をお伝えすると、手持ちの資料には、 「___A__.__B__」 のような記述の仕方(文型)があるとき、 「対象.命令」 「対象.様子」 (のように捉えることにしましょう=理解の方法として)とあり、 「=」で「代入」 とあります。 そこから考えるとき、この1行(r1 = worksheet~~)の記述にはドットが複数つながっていて 「worksheets("Sheet1").range("A65536").」は、シート1のA65536の位置(レンジ) というのはわかるのすが、そのあとあに.end(xlup).row と続けているその概念(1行の文型の捉え方)がつかみ切れていません。 Q1)これは(VBAの文法としては)「.」で状況(上でいう「対象.様子」)をまず先に並べ、そのあとにドットをつづけ、そこにやりたいことを記述するという概念で捉えておけばいいのでしょうか。 Q2)また、「.end(xlup)」だけでなく「row」がつくのはなぜでしょうか「.end(xlup)」だけではジャンプしないのかの意味) お時間のあるとき、よろしくお願いします。

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.3

>タイトル「QNo8987684_Excel_任意の行数、列数のデータを合体VBA」は現れるのですが、実行ボタンがグレーアウトして押せません。  申し訳御座いません。「QNo8987684_Excel_任意の行数、列数のデータを合体VBA」は仮に付けた名前でして、いろいろ試してみました処、どうも「、」が付いた名前ですとその様な現象が現れるようです。(何故そうなるかという原因までは解りませんが)  ですから、マクロの名称を何か別の「、」が付かない名前に変更して頂ければ正常に実行する事が出来る様になると思います。(因みに、「Microsoft Visual Basic for Applications」のウィンドウでメニューの[実行]ボタン→[Sub/ユーザーホームの実行]と操作するか、或いは[F5]キーを押す方法であれば、「、」付きの名称でも実行させる事が出来る様です)  尚、「・」や「.」、「/」、「?」、「¥」、空白、等々、他にもマクロの名称として使用出来ない文字は幾つか御座いますが、そういった使用出来ない文字を使いますと、大抵の場合は「コンパイルエラー」の表示が現れて使えない文字である事をExcelが教えてくれるのですが、「、」の場合はその様な表示が現れなかったため気付きませんでした。

ketae
質問者

お礼

なんと、「、」が制限に入っているとは知りませんでした。 たしかにマクロウインドウの前に▲(再生)ボタンではエラーが出なく、あたまに数字はないし、困っていましたが、とったら実行できました。

ketae
質問者

補足

理解のために、お時間のあるとき解説いただければ幸いです。 1| With Sheets("Sheet1") 2|Sheets("Sheet1").Range("A1:AX" & .Range("A" & RowS.Count).End(xlUp).Row).Copy 3|End With の部分ですが、「With|」で始まり、「End With」で終わる(くくりが終わる)という見方で理解しているのですが、 Q1)この3行の真ん中の行(2行目)だけでは動作しない (やりたいことが起こらない)理由が理解できません。 「With|」で始まり、「End With」で終わる箇所が2箇所(2段落)ある理由を解説いただけたら幸いです。 また Sheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats のような記述で、 Q2)xlPasteValuesAndNumberFormats」とValueだけでなく、NumberFormatsと宣言してるのはなぜでしょうか。数字も値(Value)は数字そのものとして処理されると考えていましたので、理由が知りたいと思いました(データに日付は出現しません) 最後にこれは単なる関心なのですが、 Q3) PasteSpecial Paste:=xlPasteValues のところで、イコールだけのPaste=xlPasteValues ではなく、VBAが「:=」という記述の型を使っている理由をお知りでしたら教えてください。 (「:」は、セパレーターに見えるのですが)

  • kagakusuki
  • ベストアンサー率51% (2610/5101)
回答No.2

>・コピーして貼り付ける(複写する)のは、値だけ >(罫線とか計算式は不要) との事ですが、日付や時刻等のデータは含まれていないのでしょうか?  もし日付や時刻のデータが含まれていた場合には、値だけコピー&貼り付けを行っただけでは単なるシリアル値の数値が表示されるだけで、日付や時刻は表示されませんので、値だけではなく、表示形式もコピー&貼り付けを行なわなければなりません。 Sub QNo8987684_Excel_任意の行数、列数のデータを合体VBA() With Sheets("Sheet1") Sheets("Sheet1").Range("A1:AX" & .Range("A" & RowS.Count).End(xlUp).Row).Copy End With Sheets("Sheet3").Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats With Sheets("Sheet2") Sheets("Sheet2").Range("A2:AX" & .Range("A" & RowS.Count).End(xlUp).Row).Copy End With Sheets("Sheet3").Range("A" & RowS.Count).End(xlUp).Offset(1).PasteSpecial Paste:=xlPasteValuesAndNumberFormats End Sub

ketae
質問者

お礼

お2人ともシンプルなコードをありがとうございます。 理解に難しい点がありますので、補足欄で1つ1つ伺いますが、お時間がありましたらおつきあいください。

ketae
質問者

補足

記述していただいたコードは、Excelの「開発」リボン中の→「マクロ」から開くマクロウインドウにタイトル「QNo8987684_Excel_任意の行数、列数のデータを合体VBA」は現れるのですが、実行ボタンがグレーアウトして押せません。 他のマクロは実行できます。 Excel2013、2007とも同じ現象でしたが、何が原因かおわかりになりますでしょうか。

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

転記したい具体的なセル範囲を取得(指定)して、どんどんと転記するだけです。 sub macro1()  dim r1 as long  dim r2 as long  r1 = worksheets("Sheet1").range("A65536").end(xlup).row  worksheets("Sheet3").range("A1:AX" & r1).value _  = worksheets("Sheet1").range("A1:AX" & r1).value  r2 = worksheets("Sheet2").range("A65536").end(xlup).row  worksheets("Sheet3").range("A2:AX" & r2).offset(r1 - 1, 0).value _  = worksheets("Sheet2").range("A2:AX" & r2).value end sub

ketae
質問者

お礼

お2人ともシンプルなコードをありがとうございます。 理解に難しい点がありますので、補足欄で1つ1つ伺いますが、お時間がありましたらおつきあいください。

ketae
質問者

補足

いつも記述いただくコードはわかりやすく感謝しています。 基本的な質問となりますが、2つ質問があります。 >r1 = worksheets("Sheet1").range("A65536").end(xlup).row のworksheets("Sheet1")は、シートのSheet1であることはわかるのですが、 1)range("A65536")と単純に記述しているのは、A列を検索しているのでしょうか。  その場合、なぜA列だけを対象にしているのでしょうか。 2)end(xlup).rowは、Ctrl+↑の動作と思われますが、この行では何をやっているのかがわかりません。 よろしくお願いします。

関連するQ&A

  • Excel Vba でデータの範囲を知るには?

    Excelを使用していますが、マクロ(VBA)で、シートのデータの範囲を知るにはどうすればよいのでしょうか。  印刷プレビューを行うと、自動的にページ数が求めらていますが、これは、シートのデータの範囲(列及び行の最大値)を判別しているからできるのだと思います。  これを、VBAで行、及び列のMAX値を取得したいのですが、そのメソッド(プロパティ)を知りたいのです。  どなたかご教授ください。

  • エクセル VBA

    最終行から順番に下へ同列で入力するVBAを教えて下さい。 EXCELのVBAで教えて下さい。 シート1のA列にはB列が入力されると自動入力されるNo.があり、C~G列もB列が入力されると自動入力されます。 B列には日付が、H列には3~4桁の数字が入力したいのですが、 入力行は必ず最下行のセルB、Gな為、VBAでフォームを作成し、 入力実行ボタンを押すことにより、最下行のセルB、Gに反映されるように したいです。 又、上記入力後に、シート2のH~N列をコピーして、シート3のA~G列に値のみの貼り付けを行い保存した後、シート3のA~G列をコピーして csvファイルを作成して保存したいです。 一連の流れを、フォームの入力実行ボタンを押すことで実行したいのですができるのでしょうか? 宜しく御願い致します。

  • EXCEL VBAで

    EXCEL VBAで シート1のA2~G2までの列にA,B,C,D~と題名があり、それぞれの下の行には数字が並んでます。シート2のA2~G2までの列にもA,B,C,D~と題名がありますが、ランダムに並んでます。シート1のAの行を、シート2のAの行に、BにはBへという風にコピーをさせるにはどのようにすればよいでしょうか。またシート1A~Gのどれかが欠けている場合もあります。その場合はシート1にあるもののみコピーすることとします。 わかりにくいかも知れませんか、どうかよろしくお願いします。

  • エクセル複数シートから一定の範囲を1シートへVBA

    エクセルのVBAで質問です。 A1~A3行までは、タイトル(3行が列タイトル) A4行以降から一定のデータが入っており、商品ごとにシートを分けています。 列BF4~BM81までのデータを自動でコピーし、全データシートも自動でできればと思っています。 BF4列には、日付が入っており、複数のシートからコピーされたものは、日付順にて並べたい。「全データシート」を自動で作成する方法は、ネットにて調べることができたのですが、一定の範囲内の複数シートを合算し、日付順に並べ替えて自動でコピーするというのが分かりません。 VBAも全くの初心者です。 詳しくお教えいただればと思います。 よろしくお願いします。

  • ExcelのVBAにてキーになるものを入力してデータを振分けたい

    2つのシートがあり、sheet2に振分けるデータ(下表)を作成しておきます。   (列)  1   2   3  (行)   1     A   B   C  2     ○   △   ×  3     ア   イ    ウ (1)sheet1にコンボボックスにてAを入力する。A、B、Cは、それぞれ決められたセルにコピーされる。 (2)sheet1にコンボボックスにて○を入力する。○、△、×は、それぞれ決められたセルにコピーされる。 (1)と(2)のコピーされる場所は、同じ場所です。 というようなものをExcelのVBAにて作成したいのですが、VBAは、あまりよくわかりません。 宜しくお願い致します。

  • エクセル2003のVBAを教えて

    エクセル2003のVBAを教えてください。 次の対象データで、(1)(2)(3)の作業が出来るエクセルVBAを教えて下さい。 (1)(2)(3)個々のVBAでお願いします。 ●対象データ:種類(A列)、文字(B列)、    データの行数:不特定なので、データのある最終行までとします。 ●教えていただきたい項目  (1):種類だけを(C列)に取り出す。  (2):種類の先頭に空白の行を3行入れて、追加の2行目の種類(A列)に文字(B列)を入れる。  (3):種類が5行以上あるときは、5行ごとに空白行を追加する。 ●対象データ 種類(A列)   文字(B列) AA       あああ BB       いいい BB       いい BB       いいい CC       うう CC       うう DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ DD       ええええ ●(1)のVBAの結果(このようになるVBAを教えてください。) (C列) AA BB CC DD ●(2)、(3)のVBAの結果(このようになるVBAを教えてください。) 種類(A列)    文字(B列) あああ AA        あああ いいい BB        いいい BB        いいい BB        いいい うう CC        うう CC        うう ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ DD        ええええ

  • EXCEL VBA行のコピー繰り返し

    EXCEL VBAで行の特定の列の数字を読み取りコピーしてすぐに下の行に挿入して次の行へというようなことがしたいと考えております。 例 商品ID1の数量の列の数値を読み取り4なら同じデータを3行追加する。追加後次の項目へ(商品ID2の行へ) VBAで可能でしょうか?

  • エクセルVBAで表の合体をさせたい。

    エクセルにVBAってのがあると知って勉強を始めたばかりの者です。よろしくお願いいたします。 VBAで次のようなことをしたいのですが、いい方法が思いつきません。VBAに詳しい方教えて頂けないでしょうか? シートが2枚あります。 1つのシートには、 A-101,  ,  ,あ1 A-102,  ,  , A-103,  ,  ,あ2 というデーターが書き込まれています。 2つ目のシートには、 A-101-1,  , A-101-2,  , A-101-3,  , A-102-1,  , A-102-2,  , A-103-1,  , A-103-2,  , A-103-3,  , A-103-4,  , と書き込まれています。 そこで、 A-101-1,  ,あ1 A-101-2,  ,あ1 A-101-3,  ,あ1 A-102-1,  , A-102-2,  , A-103-1,  ,あ2 A-103-2,  ,あ2 A-103-3,  ,あ2 A-103-4,  ,あ2 というふうに合体させたいのですが、いい方法ないでしょうか? 一つ目のループは、4列めのセルにデータが書き込まれているかを調べて書き込まれていたら、 1列目のセルの値が含まれる2枚目のシートのセルを全てループし、該当するものがあれば書き込むって 感じかなぁ?と思うのですが、実現には、単純にループを行う力業しかないのでしょうか? いい案があれば、教えてください。宜しくお願いいたします。 ","は、セルの区切りを表しているつもりです。

  • EXCEL 2007 VBAによる時系列データの更新について

    EXCEL 2007 VBAによる時系列データの更新について 当方初心者です。意外と簡単に解決できるものかは分かりませんが質問させて頂きます。 どなたかご教授頂ければと思います。 "A.xls"の"Sheet1"に 2010/10/4 6:00   100   101   100   101 2010/10/5 6:00   102   103   101   102 2010/10/6 6:00   103   104   100   103 2010/10/7 6:00   103   105   100   102 2010/10/8 6:00   103   105   100   102 2010/10/11 6:00   102   107   100   102 2010/10/12 6:00   102   106   100   103 というように毎日蓄積されたデータを1行ごとに保存してあります。 そして"B.xls"の"Sheet1"には 2010/10/8 6:00   103   105   100   102 2010/10/11 6:00   102   107   100   102 2010/10/12 6:00   102   106   100   103 2010/10/13 6:00   101   104   100   102 2010/10/14 6:00   100   102   100   100 2010/10/15 6:00   101   103   100   100 のように最新のデータが保存されてあり、このデータを蓄積してある データ("A.xls"の"Sheet1")にVBAによってコピーしたいのです。 ただしこの場合、既に保存してある期間のデータよりも以降 (上記例では両データ共にA列に日付データが入力されてあり、 2010/10/13 6:00以降)のデータを"A.xls"の"Sheet1"の 2010/10/12 6:00   102   106   100   103 の次の行からコピーしていきたいのですが、どのような方法で 可能なのでしょうか? まだ初心者ですがどなたか教えていただければと存じます。 宜しくお願い申し上げます。

  • エクセル VBAで2つのデータを比較して、一致するものを検索したい

    以下のような事をしたいと思っています。 VBAは今まで使った事が殆どなく困っております。 仕事で作らなければならず、宜しくお願い致します。 エクセルVBAで、既存と新規という2つのシートから 2つの条件(A列とB列の完全一致)で行を検索して 一致したものを探し出します。 一致したら「新規シート」の該当した行の売上列のデータを 「既存シート」の該当月の列へコピーしたいと思っております。 また、「新規シート」には「既存シート」にないデータが 存在するので、一致から漏れた行は「既存シート」へ 新たに追加のデータとしてコピーしたいと思っています。 イメージ↓ 既存シート) 商品名 |製造地|6月(製造月の売上)|7月(製造月の売上) a     |あ   |¥150      | b     |い   |¥200      | (空白)  |(空白)|          | 新規シート) 商品名 |製造地 |7月(製造月の売上)| a     |あ   |¥300      | b     |い   |¥100      | c     |う   |¥250      | 上記の2シートで、商品名と製造地の2つが一致していれば 「新規シート」の7月の列のデータを「既存シート」の 7月の列にコピーし、「既存シート」に存在しない 「新規シート」の商品名”c”の行のデータを「既存シート」へ 新たに商品名”c”の行を作成しコピーしたいと思っています。 出来上がり後の(既存シート) 商品名 |製造地 |6月(製造月の売上)|7月(製造月の売上) a      |あ   |¥150      |¥300 b      |い   |¥200      |¥100 c      |う   |¥0        |¥250

専門家に質問してみよう