• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBAでシート1のデータを他シートに入力させるには)

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

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

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

  • ベストアンサー
  • CC_T
  • ベストアンサー率47% (1038/2202)
回答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/2202)
回答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/2202)
回答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/2202)
回答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/2202)
回答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