VBAでシート1のデータを他シートに入力させるには

このQ&Aのポイント
  • VBAを使用して、シート1のデータを他のシートに入力させる方法について教えてください。
  • シート1にはセルにデータが入力されており、シート2には売り上げの表があります。シート1のデータを用いて、シート2に平成[シート1のB1のデータ]年[シート1のD1のデータ]月分の売上高という形で入力したいです。
  • 私はVBAについて勉強しましたが、具体的な方法がよくわかりません。どのように実現すれば良いでしょうか?
回答を見る
  • ベストアンサー

VBAでシート1のデータを他シートに入力させるには

sheet1に   A B  C D 1 H 22 . 4 2        5          6と入力しています sheet2には売り上げの表があります 現在sheet1のコード表示をクリックして、下記を入力しています。 Private Sub Worksheet_Change(ByVal Target As Range) Sheets(2).Name = Range("A1") End Sub それでsheet2にはH22.4、以下sheet3 4 ・・としています。 sheet2には売り上げの表があってその表題をsheet1に入力されている H22.4     5を使って 平成[sheet1のB1のデータ]年[sheet1のD1のデータ]月分売上高というように入力させたいのですが、色々勉強しましたが いまいち良くわかりません。 宜しくお願いします。

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

  • ベストアンサー
  • CC_T
  • ベストアンサー率47% (1038/2201)
回答No.7

全角半角の変換にはStrConv関数が使えますね。 ~~~ Private Sub Worksheet_Change(ByVal Target As Range) Dim m Dim th As String For m = 2 To 10  Sheets(m).Name = "H" & Range("A1") & "." & m + 2 th = "平成" & Range("A1") & "年" & m + 2 & "月分売上高" Sheets(m).Cells(1, 1) = StrConv(th, vbWide) Next m For m = 11 To 13 Sheets(m).Name = "H" & Range("A1") + 1 & "." & m - 10 th = "平成" & Range("A1") & "年" & m - 10 & "月分売上高" Sheets(m).Cells(1, 1) = StrConv(th, vbWide) Next m End Sub ~~~ これで各シートA1セルに入力される文字列が「平成25年6月分売上高」など全角にできますね。 シート名も変更したければ、同様にStrConvを使った操作で実現できますよ。

kyon0512
質問者

お礼

出来ました、色々とありがとうございました。 モジュールは初心者の講座とかネット上にたくさんありますが 見てもよくわからず、自分のしたいことが乗ってるサイトはまず ないですよね。 また、何かありましたら質問させて下さい。 お世話になりました。

その他の回答 (6)

  • CC_T
  • ベストアンサー率47% (1038/2201)
回答No.6

参考までに、作成したブックをアップローダーに入れておきます。 パスは00000

参考URL:
http://www.dotup.org/uploda/www.dotup.org1945644.lzh.html
kyon0512
質問者

お礼

Sub 半角数字を全角へ() Dim x As Range Set x = ActiveSheet.UsedRange x = Application.Substitute(x, "0", "0") x = Application.Substitute(x, "1", "1") x = Application.Substitute(x, "2", "2") x = Application.Substitute(x, "3", "3") x = Application.Substitute(x, "4", "4") x = Application.Substitute(x, "5", "5") x = Application.Substitute(x, "6", "6") x = Application.Substitute(x, "7", "7") x = Application.Substitute(x, "8", "8") x = Application.Substitute(x, "9", "9") End Sub これをしたにいれたのですが、変わりません sheet表示は半角でも良いのですが、 平成22年 4月分というふうに全角にしたいです。 宜しくお願いします

kyon0512
質問者

補足

何から何まですみません、ありがとうございます。 それともうひとつsheet2以降の表の表題の数字 平成22年の22を全角にするにはどのようにするのでしょうか? これで最後ですので宜しくおねがいしあmす。

  • CC_T
  • ベストアンサー率47% (1038/2201)
回答No.5

> それから上記のはsheet1のコード表示をクリックして > worksheet changeってそこに入力しましたが、その下に入力 > すればいいのですか?それでは動かなかったのですが? おや? 新規ブックを立ち上げて、シート13枚分用意して、一番左のシートでコードの表示クを リックしてでworksheetのchangeの下窓にさっきのをペースト。 で、同じ左端シートのA1セルに数字を入れる…っと。ちゃんと動きますけどね…? Excelのバージョンは何でしょうか? ~~~ ワークシートのイベントではシートのセルの入力都度にこのマクロが動くことになる はずなので、「常時動いている」という表現しました。 PCにとっても些細な負荷にすぎないのでしょうけど、年に1回のために平素から 働かせるのもなんだかね、ってところです。 ちなみに下の Sub Macro1()  から End Sub までの行分は、マクロに登録して、シートを12枚用意したブックでマクロの実行して下さい。 シートの枚数数えて必要数シートを挿入するってあたりまでは含めていませんので。

kyon0512
質問者

補足

あーなるほど出来ました。 22だけを入れただけで全て月まで表示されるんですね、あーすごいですね。それから最後に一つ ”ワークシートのイベントではシートのセルの入力都度にこのマクロが動くことになる” というのはsheet1のどこかのセルに入力したらってことですよね? 他のsheet、sheet2やsheet3のどこかにいれても実行はされないみたいですので?

  • CC_T
  • ベストアンサー率47% (1038/2201)
回答No.4

シート1の平成○年に合わせて他のシートのタイトルとセルの値を一気に更新したい、というわけですね。 であれば、例えば Private Sub Worksheet_Change(ByVal Target As Range) For m = 2 To 10 Sheets(m).Name = "H" & Range("A1") & "." & m + 2 Sheets(m).Cells(1, 1) = "平成" & Range("A1") & "年" & m + 2 & "月分売上高" Next m For m = 11 To 13 Sheets(m).Name = "H" & Range("A1") + 1 & "." & m - 10 Sheets(m).Cells(1, 1) = "平成" & Range("A1") + 1 & "年" & m - 10 & "月分売上高" Next m End Sub でご希望の動作が実現できるでしょう。シート1はA1セルに「23」など数字を入れるだけで、あとは記入不要。 Cells(1,1)でA1セルを指定して「平成○年●月分売上」を入力していますので、ここで任意のセルを指定できます。 もし各シートでグラフを作成されているなら、グラフタイトルは上記で入力したセルを参照すればいいでしょう。 ~~~ こうなるとsheet1が無駄に思えるのと、マクロが常に動いているってのは個人的にはなんだか落ち着きませんので、 個別のマクロにして必要な時に呼び出す方法も書いておきます。下記をマクロに登録して実行してみてください。 Sub Macro1()  Dim Y, m  Y = InputBox("年度を入力(例:平成24年度なら24を入力)")   For m = 1 To 9   Sheets(m).Name = "H" & Y & "." & m + 3   Sheets(m).Cells(1, 1) = "平成" & Y & "年" & m + 3 & "月分売上高"   Next m   For m = 10 To 12   Sheets(m).Name = "H" & Y + 1 & "." & m - 9   Sheets(m).Cells(1, 1) = "平成" & Y + 1 & "年" & m - 9 & "月分売上高"   Next m End Sub 売上高のbookにマクロを登録すると、売上高を記入していく際に毎回「マクロ有効にするか?」なんて セキュリティー確認が表示されて鬱陶しいので、別のブックに登録して必要時に読み込む方がいいかもしれません。

kyon0512
質問者

お礼

ちょっと中途半端になってますので再度説明しますと sheet1   A B C D 1 H 22 . 4 2   23   5 3     6 4       7       それで現在これをsheet1のWorksheet_Changeにいれています。 Private Sub Worksheet_Change(ByVal Target As Range) Sheets(2).Name = Range("A1") & Range("B1") & Range("C1") & Range("D1") Sheets(3).Name = Range("A1") & Range("B1") & Range("C1") & Range("D2") Sheets(4).Name = Range("A1") & Range("B1") & Range("C1") & Range("D3") Sheets(5).Name = Range("A1") & Range("B1") & Range("C1") & Range("D4") Sheets(6).Name = Range("A1") & Range("B1") & Range("C1") & Range("D5") Sheets(7).Name = Range("A1") & Range("B1") & Range("C1") & Range("D6") Sheets(8).Name = Range("A1") & Range("B1") & Range("C1") & Range("D7") Sheets(9).Name = Range("A1") & Range("B1") & Range("C1") & Range("D8") Sheets(10).Name = Range("A1") & Range("B1") & Range("C1") & Range("D9") Sheets(11).Name = Range("A1") & Range("B2") & Range("C1") & Range("D10") Sheets(12).Name = Range("A1") & Range("B2") & Range("C1") & Range("D11") Sheets(13).Name = Range("A1") & Range("B2") & Range("C1") & Range("D12") End Sub あと、sheet2から12までのsheet名前が上の式でH22.4からH23.3に変わっています 上記の各シートの表の表題を"平成"sheet1:B1 "年" sheet1:D4"月度売上高" として平成22年4月度売上高、以下23年3月までを表示したいのです。 上のモジュールに付け加えたら出来ないのでしょうか? たびたびすみません、宜しくお願いします。

kyon0512
質問者

補足

解答ありがとうございあmす。 Private Sub Worksheet_Change(ByVal Target As Range) For m = 2 To 10 Sheets(m).Name = "H" & Range("A1") & "." & m + 2 Sheets(m).Cells(1, 1) = "平成" & Range("A1") & "年" & m + 2 & "月分売上高" Next m For m = 11 To 13 Sheets(m).Name = "H" & Range("A1") + 1 & "." & m - 10 Sheets(m).Cells(1, 1) = "平成" & Range("A1") + 1 & "年" & m - 10 & "月分売上高" Next m End Sub これは常に動いているってことですが、 Private Sub Worksheet_Change(ByVal Target As Range) Sheets(2).Name = Range("A1") End Sub これは常に動いていませんよね? 別のブックに登録して読み込む分も記入していただきましたが、 常に動かない様にはできないのでしょうか? それから上記のはsheet1のコード表示をクリックして worksheet changeってそこに入力しましたが、その下に入力 すればいいのですか?それでは動かなかったのですが? なんどもすみません。

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.3

NO1です。 >シートの年月と表の年月は同じものが入るので問題はありません。  ⇒不正な入力等、不測の事態に対応できていないと思ったからです。   (仮にSheet1でA1に入力していない、不正なデータを入力等は、マクロ実行エラーとなる)   その他については、シート1のA1には、「H」、又は「H22.4」の何れが入力されているのか、又、この日付シートの役割が読み取れませんでしたので回答しました。   この辺りについてもう少し判り易く補足して再質問されては如何でしょうか。

kyon0512
質問者

補足

sheet1   A B  C D 1 H 22 . 4 2   23   5          6と入力しています sheet2~12には各月の売り上げの表があり、 現在sheet1のコード表示をクリックして、下記を入力しています。 Private Sub Worksheet_Change(ByVal Target As Range) Sheets(2).Name = Range("A1") End Sub それでsheet2にはH22.4、以下sheet3にはH22.5 sheet4にはH22.6 ・・と表示しています。 で、実行したいのは sheet2の売上表の表題をsheet1にある数値を使って 平成22年 4月度 5月度というように表示し sheet1の22が23に変わったら各sheetの表題も 平成23年 4月度というように変わるようにしたいということです。 説明下手ですみませんが、宜しくお願いすます。

  • CC_T
  • ベストアンサー率47% (1038/2201)
回答No.2

「売り上げの表題」が何を指すのかによって、作業が異なります。 質問タイトルにあるように「シート1のデータを他シートに入力させる」だけならVBAを使うまでもない。 ="平成"&Sheet1!B1&"年"&Sheet1!D1&"月売上高" をシート2の任意のセルに入れるなどすれば済むわけですからね。 そんなわけでご質問の意図を正しく理解できたか今一つ自信がありません。 意図とは異なる現状と、理想とする状態を明確にして、質問を補足されることをお勧めします。 ~~~ とりあえず、sheet1には ・A1に元号の”H" ・B1に和暦 ・C1にピリオド ・D列には月を順に 入力してあり、それを基にしてSheet2以下に作成済みの売り上げ表のタイトルを変えたい、 という内容かと思ったのですが、 > sheet2にはH22.4、以下sheet3 4 ・・としています。 とありますので、「H22.4」シートにある「売上表グラフ」のタイトルを「平成22年4月分売上高」、「H22.5」シートにある「売上表グラフ」のタイトルを「平成22年5月分売上高」、としていきたいということなのでしょうか? しかし、 > Sheets(2).Name = Range("A1") としているところから見ると、シート2の名前を変えたいがsheet1のセルの値を変えた時点でsheet2の名称が”H”に変わってしまう状態で困っている…ということにも見受けられますよ? もし目的が ・シート2以降に月ごとの売上高の表を作るための下準備がしたい ということで、理想状態が、 ・シート2の名称を「平成22年4月分売上高」、シート3の名称を「平成22年5月分売上高」…という風にシート1の入力に応じて自動で設定したい ということであれば、シート数が不足する場合に新規シートを挿入するなんてことまで考える必要もあるでしょうし、新たな月を作成する際にシート2以降に記載済の内容とシートのタイトルがズレてしまう可能性があるなど悪影響が想定されますから、ワークシートのイベントでシート名を変えるような操作はお勧めできませんね。

kyon0512
質問者

補足

言葉たらずですみません。 、「H22.4」シートにある「売上表グラフ」のタイトルを「平成22年4月分売上高」、「H22.5」シートにある「売上表グラフ」のタイトルを「平成22年5月分売上高」、としていきたいということなのでしょうか? そうです、そのとおりです。 sheet2にはH22.4、sheet3にはH22.5と続きます あらかじめシート2~13まで「平成22年4月分売上高」~ 「平成23年3月分売上高」までのシートを準備しておき フォームを作っておき、23年度になったらシート1の22と23を 23と24に変えたら全ての12シートのシート表示と表の表題を変えたいということです。 シート数が不足する場合に新規シートを挿入するなんてことまで考える必要もあるでしょうし 新たな月を作成する際にシート2以降に記載済の内容とシートのタイトルがズレてしまう可能性があるなど悪影響が想定されますから ですからこれは必要ないわけでして 宜しくお願いします

  • mu2011
  • ベストアンサー率38% (1910/4994)
回答No.1

先ずはマクロの前にセルの表示形式を学習する必要があると思う。 特に日付形式は、エクセルが認識している日付シリアル値を利用する方が表示編集等に有効です。 例えば、FORMAT関数を使用すれば、日付シリアル値からご希望の表題は簡単に表示できます。 この日付表示について理解できれば以下の点を再考してみては如何でしょうか。 ・日付表示内容をセル分割にしておく必要があるのか? ・日付リストにしている用途は何なのか? 因みに現在のコードは、Sheet1内の任意セルが変更された場合、無条件にSheet2タブ名を変更するが問題ないのか? 以上、不躾ですが今一度、やりたい事を見直しをされては如何でしょうか。

kyon0512
質問者

補足

早速の解答ありがとうございます。 確かにおっしゃるとおりで、現在 ="平 成 "&YM!B1&" 年  "&YM!D1&"月 分 売上高"としております しかしシートごとにおこなわなくてはならないのでVBAで一括で処理できないかと思い 調べている所存です。 因みに現在のコードは、Sheet1内の任意セルが変更された場合、無条件にSheet2タブ名を変更するが問題ないのか? との事ですが、シートの年月と表の年月は同じものが入るので問題はありません。 どうぞ、宜しくお願いします。

関連するQ&A

  • EXCELマクロでのシート間のデータ同期方法

    質問させていただきます。 EXCELにて、"シート1"のA1~C3と"シート2"のD4~F6を 同期化したく考えております。 ・いわゆる一方のシートが「読み取り専用」になってしまうリンク貼り付けではなく、シート1、シート2相互が書き換え可能の同期化です。 ・A1とD4、B3とE6、のように互いに照合箇所のセル同士を同期反映させたいと考えております。 なお、他の質問を参照したところ、 シート1のA1とシート2のD4の単一セルを同期かする方法は確認できました。(以下参照) ***************************************************************** シート1のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Worksheets("シート2").Range("D4") = Target End If End Sub シート2のコードは Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$4" Then Worksheets("シート1").Range("A1") = Target End If End Sub *************************************************************** これを参考にVBAの シート1のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$2" Then Worksheets("シート2").Range("D5") = Target End If End Sub シート2のコードエディターに Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$D$5" Then Worksheets("シート2").Range("A2") = Target End If End Sub というように追記していったのですが、エラーとなってしまいます。 お詳しい方がおられましたらお願いいたします。

  • Excel VBA 他のシートに演算結果を入れたい

    例えば、A~Dというシートのいずれかのo1セルに数値を入力すると、演算結果がp1に入る場合。 A~Dのどのシートでもo1に入力したら、Z!p1にp1の値を放り込みたいのです。 で、以下のようなコードを書いたのですが、上手くいきません。 因みに、セルの移動方向はオプションで「右方向」に設定してあります。 ※結果としてセルの移動を認識していないのか、まったく無反応です。 ※Range("Z!$P$1") =… の行にブレークポイントを設定しても、引っかかりません。 何が悪いのかお教え頂ければ幸甚です。 >違うシートには代入できない… ってことでしょうか? Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$P$1" Then Range("Z!$P$1") = Range("$P$1") End If End Sub ※なお、出典元のSubは以下の様なもので、正常に動作していました。 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Target.Address = "$A$1" Then Range("B1") = Range("B1")+1 End If End Sub

  • Excel VBA セルの双方向同期のエラーについ

    エラーが発生して理由がわからないので、どなたか助言をお願いします。 以下のVBAにて、目的のセルにデータを入力すると、1回目は必ず添付写真の通りのエラーが出まして、デバッグをすると3行目が黄色でハイライトされます。 記述は以下の通りです。どうぞよろしくお願いします。 シートAへのVBA設定 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Sheets("シートB").Range("$B$1").Value = Sheets("シートA").Range("$A$1").Value End If End Sub シートBへのVBA設定 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" Then Sheets("シートA").Range("$A$1").Value = Sheets("シートB").Range("$B$1").Value End If End Sub

  • EXCEL VBA 他のワークシートのデータを見るには?

    EXCEL VBAでsheet1のセルに何かデータが入力された時に、sheet2のどこかのセルに同じ文字列がないかを探したいと思います。 データの入力と同時に検索をかけるため、sheet1の部分にイベントプロシージャを定義し、 データが入力された時にそのルーチンの中からsheet2のデータを見に行きたいのですが、エラーが出てしまいます。 こういうことはできないのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range) Dim LineNo As Integer Dim tmp_str As String tmp_str = Target.Value LineNo = Sheets("sheet2").Cells.Find(what:=tmp_str, lookat:=xlWhole).Row MsgBox (LineNo) End Sub

  • VBA シート間の同期(列、行、選択範囲)

    初めての質問となります。 よろしくお願いいたします。 シート間の同期でセルの同期は他の質問を参照してできましたが、 ”行”や”列”での同期/相互参照は、どのように書けばいいのでしょうか。。 下記、sheet1”A1”とsheet2の”B1”に記載したcodeです。 'sheet1に以下を記述 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$A$1" Then Sheets("Sheet2").Range("$B$1").Value = Sheets("Sheet1").Range("$A$1").Value End If End Sub 'sheet2に以下を記述 Private Sub Worksheet_Change(ByVal Target As Range) If Target.Address = "$B$1" Then Sheets("Sheet1").Range("$A$1").Value = Sheets("Sheet2").Range("$B$1").Value End If End Sub 【質問内容】 sheet1の”A列”とsheet2の”B列”はどう書くのでしょう? 上記の方法では無理、または負荷が大きい場合は、 sheet1の”A1:C3”とsheet2の”D4:F6”はどう書くのでしょう? という内容になります。 先日からVBAを触り始め、 自分なりに調べて一通り試してみましたが解決できませんでした。。 お手数おかけしますが何卒よろしくお願いいたします。

  • VBAにおけるセルの名前の参照方法

    現在、Aシート、Bシートがあり、BシートのA1セルに test という名前を付けました。(範囲はブック) Aシートが再計算されれば、BシートのA1セルをメッセージボックスで表示したいのですが、調べましたが、よくわかりませんでしたので、詳しい方教えてください。 範囲はブックになっているし、他に同じセルの名前もつけれないようになっているので、 このような記述で大丈夫かと思いましたがエラーが出でしまいました。 なぜでしょうか?やはりわざわざ毎回シート名から記述が必要なのでしょうか? Private Sub Worksheet_Change(ByVal Target As Range)      MsgBox (Range("test").Value) End Sub このようにシート名から書けば表示されました。 Private Sub Worksheet_Change(ByVal Target As Range)      MsgBox (Worksheets("B").Range("test").Value) End Sub

  • Excelでシート名と最終更新日を自動表示したい

    Excelを使って (1)セルA1に入れた名目をシート名にし (2)セルH1には、最終更新日を自動で入れたいです。 調べた結果、 シート名を右クリックして「コードの表示」から (1)は Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub を入れてうまくいきましたが、 (2)は Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If ThisWorkbook.Saved = False Then   Worksheets("Sheet1").Range("H1").Value = Date  End If End Sub を入れてみましたが(←調べましたもの) うまくいきませんでした。 単純に、 Private Sub Worksheet_Change(ByVal Target As Range) Sheets(1).Name = Range("B1") End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)  If ThisWorkbook.Saved = False Then   Worksheets("Sheet1").Range("H1").Value = Date  End If End Sub とつなげて入れるのではだめなんでしょうか? それとも、(2)の何かが間違っていますか? ご教授願います。

  • エクセル VBA データ入力

    こんにちは、はじめまして。 エクセル・VBA初心者です。 会社に入って3ヶ月になります。 同じファイル内で、入力用シートから 違うシートに表としてデータを転送するため、 本や今まで作ったものを参考にして下のようなVBAを作成したのですがうまくいきません。 Sub 転記() Dim ws0 As Worksheet, ws1 As Worksheet, chikuseki As Range Dim nyuryoku() Set ws0 = Worksheets("Worksheet1") Set ws1 = Worksheets("Worksheet2") nyuryoku = Array("b3", "d3", "f3", "h3") '転記したいセルの位置 Set chikuseki = ws1.Range("f", "g", "k", "q" & Rows.Count).End(xlUp).Offset(1) 'データ蓄積セル For i = 0 To UBound(nyuryoku) chikuseki.Offset(0, i).Value = ws0.Range(nyuryoku(i)).Value ws0.Range(nyuryoku(i)).MergeArea.ClearContents Next masgbox "入力完了" End Sub 十何個あるデータを転送する場合、フォームから入力した方が簡単なのでしょうか? また、表にデータを転記し、そのなかのデータのいくつかを別の表に転記することは、一度の操作で可能ですか? 今週中に仕上げろと言われたので急いでいます、 どうかよろしくお願いします。 質問がまとまっていなくてわかりにくければ申し訳ないです。

  • EXCEL 異なるVBA

    教えて下さい、EXECL以下の異なるVBA (A>,B>)が2つあります、同じシートでそれぞれ動くようにさせたいです1つに合わせる事は出来ないでしょうか? 当方初心者の為わかりません教えて下さい。 A> Private Sub Worksheet_Change(ByVal Target As Excel.Range) If Target.Address(0, 0, xlA1, 0) <> "A1" Then Exit Sub With Range("F9:I9,K17:K36").Borders(xlDiagonalUp) If Left$(Target.Value, 1) = "S" Then .LineStyle = xlContinuous .Weight = xlThin .ColorIndex = xlAutomatic Else .LineStyle = xlNone End If End With End Sub B> Private Sub Worksheet_Change(ByVal Target As Range) With Sheet2 Select Case Target.Address Case Is = "$D$1" .Range("A1").Insert Shift:=xlDown .Range("A1").Value = Target.Value Case Is = "$D$2" .Range("B1").Insert Shift:=xlDown .Range("B1").Value = Target.Value End Select End With End Sub

  • EXCELでSheetにデータを蓄積したい

    Sheet1に入力シートを作成し、Sheet2に蓄積シートを作成しました。 Sheet1で作成されたデータをSheet2に蓄積させておきたい。 Sheet1のA2の値が入力された場合に実行するとすると Sheet1のデータ数は、毎回異なります。 他を参考に以下のように作ってみたのですが、 Private Sub Worksheet_Change(ByVal Target As Range) Dim lastA As Long, lastB As Long, ws1 As Worksheet, ws2 As Worksheet Set ws1 = Sheets("入力シート") Set ws2 = Sheets("蓄積シート") With Target If .Address <> "$A$2" Or .Count <> 1 Or IsEmpty(Target) Then Exit Sub If WorksheetFunction.Count(ws1.Range("a1:s1")) <> 19 Then Exit Sub lastA = ws2.Range("a65536").End(xlUp).Row lastB = ws1.Range(("a2:s2"), Selection.End(xlDown)).Select ws2.Range("a" & lastA + 1).Resize(1, 19).Value = _ ws1.Range("a2:S2").Resize(1, 19).Value End With End Sub 'ws1.Range("a2:S2").Resize(1, 19).Value の部分で '上記ws1の範囲の内、Row2の値しかws2へ反映されません どなたか教えて頂けないでしょうか。

専門家に質問してみよう