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のデータ]月分売上高というように入力させたいのですが、色々勉強しましたが
いまいち良くわかりません。
宜しくお願いします。
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を使った操作で実現できますよ。
出来ました、色々とありがとうございました。
モジュールは初心者の講座とかネット上にたくさんありますが
見てもよくわからず、自分のしたいことが乗ってるサイトはまず
ないですよね。
また、何かありましたら質問させて下さい。
お世話になりました。
No.6
- 回答日時:
この回答への補足
何から何まですみません、ありがとうございます。
それともうひとつsheet2以降の表の表題の数字
平成22年の22を全角にするにはどのようにするのでしょうか?
これで最後ですので宜しくおねがいしあmす。
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月分というふうに全角にしたいです。
宜しくお願いします
No.5
- 回答日時:
> それから上記のはsheet1のコード表示をクリックして
> worksheet changeってそこに入力しましたが、その下に入力
> すればいいのですか?それでは動かなかったのですが?
おや?
新規ブックを立ち上げて、シート13枚分用意して、一番左のシートでコードの表示クを
リックしてでworksheetのchangeの下窓にさっきのをペースト。
で、同じ左端シートのA1セルに数字を入れる…っと。ちゃんと動きますけどね…?
Excelのバージョンは何でしょうか?
~~~
ワークシートのイベントではシートのセルの入力都度にこのマクロが動くことになる
はずなので、「常時動いている」という表現しました。
PCにとっても些細な負荷にすぎないのでしょうけど、年に1回のために平素から
働かせるのもなんだかね、ってところです。
ちなみに下の
Sub Macro1()
から
End Sub
までの行分は、マクロに登録して、シートを12枚用意したブックでマクロの実行して下さい。
シートの枚数数えて必要数シートを挿入するってあたりまでは含めていませんので。
この回答への補足
あーなるほど出来ました。
22だけを入れただけで全て月まで表示されるんですね、あーすごいですね。それから最後に一つ
”ワークシートのイベントではシートのセルの入力都度にこのマクロが動くことになる”
というのはsheet1のどこかのセルに入力したらってことですよね?
他のsheet、sheet2やsheet3のどこかにいれても実行はされないみたいですので?
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にマクロを登録すると、売上高を記入していく際に毎回「マクロ有効にするか?」なんて
セキュリティー確認が表示されて鬱陶しいので、別のブックに登録して必要時に読み込む方がいいかもしれません。
この回答への補足
解答ありがとうございあ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ってそこに入力しましたが、その下に入力
すればいいのですか?それでは動かなかったのですが?
なんどもすみません。
ちょっと中途半端になってますので再度説明しますと
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月までを表示したいのです。
上のモジュールに付け加えたら出来ないのでしょうか?
たびたびすみません、宜しくお願いします。
No.3
- 回答日時:
NO1です。
>シートの年月と表の年月は同じものが入るので問題はありません。
⇒不正な入力等、不測の事態に対応できていないと思ったからです。
(仮にSheet1でA1に入力していない、不正なデータを入力等は、マクロ実行エラーとなる)
その他については、シート1のA1には、「H」、又は「H22.4」の何れが入力されているのか、又、この日付シートの役割が読み取れませんでしたので回答しました。
この辺りについてもう少し判り易く補足して再質問されては如何でしょうか。
この回答への補足
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月度というように変わるようにしたいということです。
説明下手ですみませんが、宜しくお願いすます。
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以降に記載済の内容とシートのタイトルがズレてしまう可能性があるなど悪影響が想定されますから、ワークシートのイベントでシート名を変えるような操作はお勧めできませんね。
この回答への補足
言葉たらずですみません。
、「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以降に記載済の内容とシートのタイトルがズレてしまう可能性があるなど悪影響が想定されますから
ですからこれは必要ないわけでして
宜しくお願いします
No.1
- 回答日時:
先ずはマクロの前にセルの表示形式を学習する必要があると思う。
特に日付形式は、エクセルが認識している日付シリアル値を利用する方が表示編集等に有効です。
例えば、FORMAT関数を使用すれば、日付シリアル値からご希望の表題は簡単に表示できます。
この日付表示について理解できれば以下の点を再考してみては如何でしょうか。
・日付表示内容をセル分割にしておく必要があるのか?
・日付リストにしている用途は何なのか?
因みに現在のコードは、Sheet1内の任意セルが変更された場合、無条件にSheet2タブ名を変更するが問題ないのか?
以上、不躾ですが今一度、やりたい事を見直しをされては如何でしょうか。
この回答への補足
早速の解答ありがとうございます。
確かにおっしゃるとおりで、現在
="平 成 "&YM!B1&" 年 "&YM!D1&"月 分 売上高"としております
しかしシートごとにおこなわなくてはならないのでVBAで一括で処理できないかと思い
調べている所存です。
因みに現在のコードは、Sheet1内の任意セルが変更された場合、無条件にSheet2タブ名を変更するが問題ないのか?
との事ですが、シートの年月と表の年月は同じものが入るので問題はありません。
どうぞ、宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) 【変更】ファイルを閉じてダイアログで保存した時、更新したシートだけの処理の実行をする 5 2022/03/26 18:31
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
- Visual Basic(VBA) Sheet「状況」から、分類の年齢別カウント数をSheet「D表」へ転記する下記マクロを作っています 7 2022/12/14 17:57
- Visual Basic(VBA) EXCELのVBAについて 2 2023/07/05 17:17
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) VBA リスト表示していますが 3 2023/05/18 12:12
- Visual Basic(VBA) userformでSheetを選択して開くコード 1 2023/05/15 16:27
- Visual Basic(VBA) 【Excel VBA】自動メール送信の機能追加 5 2022/09/29 12:53
- Visual Basic(VBA) VBA 別sheetからの転記なのですが 2 2023/05/22 15:55
- Visual Basic(VBA) VBAで日付入力しているのですが 4 2023/03/02 11:25
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
Excel、同じフォルダ内のExcel...
-
前の(左隣の)シートを連続参...
-
エクセルの複数シートの保護を...
-
別シート参照のセルをシート毎...
-
エクセルVBAでパスの¥マークに...
-
Excelのシートを、まとめて表示...
-
VBAでシートコピー後、シート名...
-
エクセルで前シートを参照して...
-
エクセルで前のシートを連続参...
-
EXCEL:同じセルへどんどん足し...
-
エクセルでファイル保存時に複...
-
EXCELで1ヶ月分の連続した日付...
-
エクセルのシート名をリスト化...
-
Accessのスプレッドシートエク...
-
別シートの最終行に貼り付けす...
-
複数シートの特定の位置に連番...
-
VBAで条件によりフォントサイズ...
-
excelでシート毎の最終更新日を...
-
エクセルで「ウィンドウを元の...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelで同じシートのコピーを一...
-
エクセルの複数シートの保護を...
-
エクセルVBAでパスの¥マークに...
-
前の(左隣の)シートを連続参...
-
Excelで金銭出納帳。繰越残高を...
-
EXCEL:同じセルへどんどん足し...
-
EXCELで1ヶ月分の連続した日付...
-
シートの保護のあとセルの列、...
-
別シート参照のセルをシート毎...
-
エクセルでファイルを開いたと...
-
EXCELで同一フォーマットのシー...
-
エクセルで前のシートを連続参...
-
エクセルで前シートを参照して...
-
VBAでシートコピー後、シート名...
-
Accessのスプレッドシートエク...
-
エクセルのシート名をリスト化...
-
複数シートの特定の位置に連番...
-
Excelのシートを、まとめて表示...
-
エクセル 計算式も入っていない...
-
スプレッドシートの関数VLOOKUP...
おすすめ情報