【他のレンジ/シート/ブックを更新する】
1 他のレンジを更新
2 他のシートを更新
3 逆Z式並びで更新
4 複数シートを更新
5 他のブックを更新
6 他のブックをオープン・クローズ
7 新規ブックを作成し更新
今回は、Excel VBAによってあるシートのセルから別シートのセルに文字を代入するマクロをつくってみます。
Excel VBA/マクロで、シート内で、あるセルから別のセルに値を代入するときは、次のような構文になります。
シート内で、あるセルから別のセルに値を代入するときは、ワークシート名が無くても、コンピューターは
どこから、どこに代入するかを判断できます。
だけど、あるシートから別のシートに値を代入するときは、ワークシート名が無ければ、コンピューターは
どのワークシートのセルから、どのワークシートのセルに代入するかを判断できなくなります。
そのため、Excel VBA/マクロで、あるシートのセルから、別シートのセルに値を代入するときは、
それぞれのワークシート名を指定します。
次のような構文になります。
前回は、同一シート内で、『漢字入力帳』レンジからデータを読みとり、『漢字学習帳』レンジへデータを書きこみました。
今回は、『漢字入力帳』シートからデータを読みとり、『漢字学習帳』シートへデータを書きこんでみます。
そこで、その準備として、Excelマクロ有効ブック内に、『漢字入力帳』シートと『漢字学習帳』シートを
作成しておきましょう。
先ずは、前回使用したExcelマクロ有効ブックをコピーして『9_シートからシートへ代入する.xlsm』を
作成します。
次に、『9_シートからシートへ代入する.xlsm』の『Sheet1』のシート名を『漢字入力帳』に変更し、
レンジ『L2:AE13』をクリアします。
そして、シート名『漢字入力帳』にカーソルを合わせて右クリックし、『移動またはコピー』を選択します。
『シートの移動またはコピー』画面が表示されたら、『末尾へ移動』を選択します。
『コピーを作成する』にチェックを入れて、『OK』をクリックします。
最後に、コピーして作成された『漢字入力帳 (2)』のシート名を『漢字学習帳』に変更し、
レンジ『A1:J11』をクリアします。
これで、『漢字入力帳』シートからデータを読みとり、『漢字学習帳』シートへデータを書きこむ準備ができました。
それでは、『漢字入力帳』シートからデータを読みとり、『漢字学習帳』シートへデータを書きこむマクロを作成しましょう。
『漢字入力帳』シートを選択します。
Excelの『漢字入力帳』シートのB列に記述されている文を1文字ずつ分解しながら、
『漢字学習帳』シートに2行目から縦書きで書きこみ、
『漢字入力帳』シートのC~F列に記述されている漢字が
『漢字学習帳』シートに書きこんだ文字の中にあれば、
当セルを空欄のマスにして、併せてそのすぐ右側に、
『漢字入力帳』シートのG~J列に記述されているふりがなを書きこむ。
この一連の処理を、『漢字入力帳』シートの最小行から最大行までのループ処理で一気に実行し、
『漢字学習帳』シートのL列からAD列まで瞬時に書きこみます。
マクロ『レンジからレンジ4』を元にして、マクロ『シートからシート1』をつくります。
先ず、宣言部を改修します。
読込ワークシート『ESheet』に『漢字入力帳』を設定して定数宣言
Const ESheet = "漢字入力帳"
書込ワークシート『WSheet』に『漢字学習帳』を設定して定数宣言
Const WSheet = "漢字学習帳"とします。
【『シートからシート1』_ 宣言部】
そして、処理部を改修します。
マクロ『レンジからレンジ4』では、同一シート内で、あるレンジからデータを読みとり、
別レンジへデータを書きこみましたが、マクロ『シートからシート1』では、
あるシートのレンジからデータを読みとり、別シートのレンジへデータを書きこみます。
そのため、変更箇所は、次のようになります。
このように、
Cells(ERw, ECm)の前に、Worksheets(ESheet).
Cells(WRw, WCm)の前に、Worksheets(WSheet).
を追加します。
【『シートからシート1』_ 処理部】
それでは、このマクロを実行してみましょう。
『漢字学習帳』シートのL列からAD列にかけて、漢字の書きこみ問題が作成されました。
次は、『漢字学習帳』シートのB列からT列にかけて、漢字の書きこみ問題を作成してみましょう。
『漢字学習帳』シートのB列からK列を削除します。
レンジ『B2:U13』をクリアします。
マクロ『シートからシート1』では、『漢字学習帳』シートのL列からAD列にかけて、
漢字の書きこみ問題を作成しました。
今度は、マクロ『シートからシート1』をコピーして、マクロ『シートからシート2』とし、
『漢字学習帳』シートのB列からT列にかけて、漢字の書きこみ問題を作成します。
書込最小列がL列からB列に変わるだけだから、
『書込最小列『WMinCm』を『12』列目から『2』列目に変更します。
Const WMinCm = 2とします。
【『シートからシート2』_ 宣言部】
今回は、処理部の変更はありません。それでは、このマクロを実行してみましょう。
『漢字学習帳』シートのB列からT列にかけて、漢字の書きこみ問題が作成されました。
『漢字学習帳』シートのT列からB列にかけて右から左へ、漢字問題を書きこむマクロを作成してみましょう。
予め、レンジ『B1:U13』をクリアしておきましょう。
マクロ『シートからシート2』では、『漢字学習帳』シートのB列からT列にかけて
左から右へ2列ずつカウントアップしながら、漢字問題を作成しました。
今度は、マクロ『シートからシート2』をコピーして、マクロ『シートからシート3』とし、
『漢字学習帳』シートのT列からB列にかけて右から左へ2列ずつカウントアップしながら、
漢字問題を作成します。
書込最小列がB列からT列に変わるから、書込最小列『WMinCm』を『2』列目から『20』列目に変更します。
Const WMinCm = 20とします。
【『シートからシート3』_ 宣言部(1)】
それでは、このマクロを実行してみましょう。
『漢字学習帳』シートのT列からB列にかけて右から左へ2列ずつ、漢字問題を作成したかったのに、
『漢字学習帳』シートのT列からAL列にかけて左から右へ2列ずつ、漢字問題が作成されました。
これは、このマクロの書込列カウントアップの代入式
WCm = WCm + WStpCmが、関わっています。
【『シートからシート3』_ 処理部】
Const WStpCm = 2と定数宣言しているから、
書込列カウントアップの代入式WCm = WCm + WStpCmの中の、WStpCmの値は2です。
入力行のループの中で、WCm = WCm + 2ということは、
入力行が1行ずつ増える毎に、WCm(書込列)が、左から右に2列ずつ増えていくということになります。
WCm(書込列)が、右から左に2列ずつ減っていくようにするには、どうしたら良いと思いますか。
WCm = WCm + 2ならば、WCm(書込列)が、左から右に2列ずつ増えていくのだから、
WCm = WCm – 2ならば、WCm(書込列)が、右から左に2列ずつ減っていくと思います。
WCm = WCm + WStpCmという代入式で、WCm = WCm – 2を成り立たせるために、
Const WStpCm = -2と定数宣言する必要があります。
【『シートからシート3』_ 宣言部(2)】
このマクロを実行してみましょう。
『漢字学習帳』シートのT列からB列にかけて右から左へ2列ずつ、漢字問題が作成されました。
次は、『漢字学習帳』シートのT列からB列にかけて右から左へ2列ずつカウントアップしながら、
『漢字入力帳』シートのA列に記述されている問題番号を、先頭行に書きこみます。
今度は、マクロ『シートからシート3』をコピーして、マクロ『シートからシート4』とし、
『漢字学習帳』シートのT列からB列にかけて右から左へ2列ずつカウントアップしながら、
漢字問題を作成すると同時に、先頭行に問題番号を読み書きするプログラムコードを追加します。
先ず、宣言部を改修します。
読込問題番号列『EMDNoCm』に『1』列目を設定して定数宣言
Const EMDNoCm = 1
書込問題番号行『WMDNoRw』に『1』行目を設定して定数宣言
Const WMDNoRw = 1
問題番号『MDNo』を長整数型として変数宣言
Dim MDNo As Longとします。
【『シートからシート4』_ 宣言部】
そして、処理部を改修します。
『漢字入力帳』シートの最小行:『EMinRw』(2行目)から最大行:『EMaxRw』(11行目)にかけて、
各行の漢字問題作成処理をループ処理で実行しますが、
この漢字問題作成処理の最初に、
先頭行に問題番号を読み書きするプログラムコードを追加します。
For ERw = EMinRw To EMaxRw
MDNo = Worksheets(ESheet).Cells(ERw, EMDNoCm).Value
Worksheets(WSheet).Cells(WMDNoRw, WCm).Value = MDNo
・・・・・・・・・・・・・・・・・・・・・・
Next ERw
とします。
【『シートからシート4』_ 処理部】
それでは、このマクロを実行してみましょう。
『漢字学習帳』シートのT列からB列にかけて、先頭行に問題番号が書きこまれました。
2023-03-19
2021-12-20
2021-12-12