【他のレンジ/シート/ブックを更新する】

1 他のレンジを更新

2 他のシートを更新

3 逆Z式並びで更新

4 複数シートを更新

5 他のブックを更新

6 他のブックをオープン・クローズ

7 新規ブックを作成し更新

他のレンジを更新

 今回から、Excel VBA/マクロによって漢字学習アプリを作成します。

 先ず、漢字入力帳のサンプルを次のように作成します。

Img8_1_11

 漢字入力帳の仕様は、次の通りです。

 (1) B列に問題文を横書きで記述します。

 (2) C~F列に問題にしたい漢字を1文字ずつ記述します。

 (3) G~J列に問題にしたい漢字のふりがなを1文字ずつ記述します。

 (4) A列に番号を記述します。


 次に、マクロを記述しますが、その仕様は次の通りです。

 (1) 漢字入力帳の2~11行を順に読みとる。

 (2) 漢字入力帳のB列に記述されている文を1文字ずつ分解しながら漢字学習帳に縦書きで書きこむ。

 (3) 漢字入力帳のC~F列に記述されている漢字が漢字学習帳に書きこんだ文字の中にあれば、そこを空欄の

   マスにして、併せてそのすぐ右側に、漢字入力帳のG~J列に記述されているふりがなを書きこむ。


 マクロを実行すれば、次のような漢字学習帳が作成されます。

Img8_1_12

 最初に、同一シート内で、漢字入力帳から、漢字学習帳を作成するマクロをつくってみます。



1. 文字列を1文字ずつ分解しながら縦書きで連続するセルに書きこむ

 先ず、Excelの2行目、B列に記述されている文を1文字ずつ分解しながらL列に2行目から縦書きで

 書きこんでみます。

 以前つくったマクロ『指定行_1文字連続分解』を元に、マクロ『レンジからレンジ1』をつくります。


 【マクロ『指定行_1文字連続分解』】

Img8_1_13

 『指定行_1文字連続分解』のマクロをそのままコピーします。

 ここで、このマクロをつかって、Excel VBAコードの構成を説明します。

 Excel VBAコードは、大きく宣言部処理部に分かれます。

 宣言部には、変数や定数の宣言を記述します。

 処理部には、代入文、ループ処理、条件分岐処理、

 そして関数やプロパティの設定などの処理手順を記述します。

 このように、宣言部処理部と分けておくと、Excel VBAコードが記述しやすくなり、

 また、Excel VBAコードが改修しやすくなります。

 先ず、宣言部を改修します。

 今回は、読込列がB列なので読込列:ECmを2、読込行が2行なので読込行:ERwを2とします。

 書込列がL列なので書込列:WCmを12、書込行は変動するものなので書込行:WRwを長整数型の変数とします。


 【『レンジからレンジ1』_ 宣言部】

Img8_1_14

 次に、処理部を改修します。

 書込行:WRwとMid関数の開始位置:StPとの関係は次のように記述します。

 開始位置:StPが1のとき書込行:WRwは2行目、

 開始位置:StPが2のとき書込行:WRwは3行目、

 開始位置:StPが最大文字数のとき書込行:WRwは最大文字数+1行目なので、

 WRw = StP + 1とします。


 【『レンジからレンジ1』_ 処理部】

Img8_1_15

 マクロを実行します。

Img8_1_16

 Excelの2行目、B列に記述されている文が1文字ずつ分解されて、L列に2行目から縦書きで書きこまれました。


2. 文字列の中に特定の文字があれば、該当セルを空欄のマスにする

Img8_1_21

 次は、ExcelのC~F列に記述されている漢字が文字列の中にあれば、該当セルを空欄のマスにしてみます。

 マクロ『レンジからレンジ1』を元にマクロ『レンジからレンジ2』をつくります。


 【『レンジからレンジ1』】

Img8_1_22

 『レンジからレンジ1』のマクロを全てコピーします。

 先ず、宣言部を改修します。変数及び定数を追加します。


 最大枠数『MaxWakuSu』に『4』個を設定して定数宣言

 Const MaxWakuSu = 4

 漢字最小列『MinCm_ENT』に『3』列目を設定して定数宣言

 Const MinCm_ENT = 3

 漢字最大列『MaxCm_ENT』に『6』列目を設定して定数宣言

 Const MaxCm_ENT = 6

 列英字名『AlphaCm』を文字列型として変数宣言

 Dim AlphaCm As String

 漢字列『KCm』を整数型として変数宣言

 Dim KCm As Integer

 漢字名『Kanzi』を文字列型として変数宣言

 Dim Kanzi As String

 文字位置数『MojiNo』を整数型として変数宣言

 Dim MojiNo As Integer

 書込サブ行『WSRw』を長整数型として変数宣言

 Dim WSRw As Long

 枠領域『WKRng』を文字列型として変数宣言

 Dim WKRng As String


 【『レンジからレンジ2』_ 宣言部】

Img8_1_23

 そして、処理部を改修します。

 ExcelのC~F列に記述されている漢字が文字列の中にあれば、該当セルを空欄のマスにしてみます。


 (1) 書込列12列目の列英字名を取得

 AlphaCm = Replace(Cells(1, WCm).Address(False, False), "1", "")

 (2) 書込行に初期値として1を代入

 WRw = 1

 (3) Excelの3列目から6列目までをループ処理で漢字列をカウントアップ

 For KCm = MinCm_ENT To MaxCm_ENT

 Next KCm

 (4) 漢字名を取得

 Kanzi = Cells(ERw, KCm).Value

 (5) 漢字名が空白でないとき、

 If Kanzi <> "" Then

 End If

 (6) 該当漢字の文字位置数を取得

 MojiNo = InStr(Cells(ERw, ECm).Value, Kanzi)

 (7) 該当漢字の文字位置数が0より大きいとき、

 If MojiNo > 0 Then

 End If

 (8) 書込サブ行を書込行+文字位置数により算出

 WSRw = WRw + MojiNo

 (9) 枠領域を列英字名と書込サブ行の文字連結により算出

 WKRng = AlphaCm & WSRw

 (10) 枠領域を実線で囲む

 Range(WKRng).Borders.LineStyle = xlContinuous

 (11) 枠領域を空欄にする

 Range(WKRng).Value = ""


 【『レンジからレンジ2』_ 処理部】

Img8_1_24

 このマクロを実行してみます。

Img8_1_25

 ExcelのセルC2に記述されている漢字『書』があったセルL8が空欄のマスになりました。



3. 文字列の中に特定の文字があれば、該当セルの右側にふりがなを書きこむ

Img8_1_31

 次は、ExcelのC~F列に記述されている漢字が文字列の中にあれば、該当セルのすぐ右側に、

 G~J列に記述されているふりがなを書きこみます。

 マクロ『レンジからレンジ2』を元にマクロ『レンジからレンジ3』をつくります。

 『レンジからレンジ2』のマクロを全てコピーします。

 先ず、宣言部を改修します。変数の宣言を追加します。


 ふりがな書込列『FWCm』を整数型として変数宣言

 Dim FWCm As Integer

 ふりがな列『FCm』を整数型として変数宣言

 Dim FCm As Integer

 ふりがな名『Furigana』を文字列型として変数宣言

 Dim Furigana As String


 【『レンジからレンジ3』_ 宣言部】

Img8_1_32

 そして、処理部を改修します。

 ExcelのC~F列に記述されている漢字が文字列の中にあれば、該当セルのすぐ右側に、G~J列に

 記述されているふりがなを書きこみます。

 下記の青字のプログラムコードを追加します。


 (1) 書込列12列目の列英字名を取得

 AlphaCm = Replace(Cells(1, WCm).Address(False, False), "1", "")

 (2) 書込行に初期値として1を代入

 WRw = 1


 ふりがな書込列を書込列+1により算出

 FWCm = WCm + 1


 (3) Excelの3列目から6列目までをループ処理で漢字列をカウントアップ

 For KCm = MinCm_ENT To MaxCm_ENT

 Next KCm


 ふりがな列を漢字列+最大枠数により算出

 FCm = KCm + MaxWakuSu


 (4) 漢字名を取得

 Kanzi = Cells(ERw, KCm).Value

 (5) 漢字名が空白でなければ、

 If Kanzi <> "" Then

 End If

 (6) 該当漢字の文字位置数を取得

 MojiNo = InStr(Cells(ERw, ECm).Value, Kanzi)


 ふりがな名を取得

 Furigana = Cells(ERw, FCm).Value


 (7) 該当漢字の文字位置数が0より大きければ、

 If MojiNo > 0 Then

 End If


 ふりがなが空白でなければ

 If Furigana <> "" Then

 End If


 (8) 書込サブ行を書込行+文字位置数により算出

 WSRw = WRw + MojiNo

 (9) 枠領域を列英字名と書込サブ行の文字連結により算出

 WKRng = AlphaCm & WSRw

 (10) 枠領域を実線で囲む

 Range(WKRng).Borders.LineStyle = xlContinuous

 (11) 枠領域を空欄にする

 Range(WKRng).Value = ""


 ふりがなの更新

 Cells(WSRw, FWCm).Value = Furigana


 【『レンジからレンジ3』_ 処理部】

Img8_1_33

 このマクロを実行します。

Img8_1_34

 「ExcelのセルG2に記述されている漢字『か』がセルM8に書きこまれました。



4. 行のループで漢字学習帳を作成する

Img8_1_41

 Excelの漢字入力帳のB列に記述されている文を1文字ずつ分解しながら、漢字学習帳に2行目から

 縦書きで書きこみ、漢字入力帳のC~F列に記述されている漢字が漢字学習帳に書きこんだ文字の中にあれば、

 当セルを空欄のマスにして、併せてそのすぐ右側に、漢字入力帳のG~J列に記述されているふりがなを書きこむ。

 この一連の処理を、漢字入力帳の最小行から最大行までのループ処理で一気に実行し、L列からAD列まで

 瞬時に書きこみます。

 マクロ『レンジからレンジ3』を元にマクロ『レンジからレンジ4』をつくってみます。

 『レンジからレンジ3』のマクロを全てコピーします。


 先ず、宣言部を改修します。

 読込最小行『EMinRw』に『2』行目を設定して定数宣言

 Const EMinRw = 2

 書込最小列『WMinCm』に『12』列目を設定して定数宣言

 Const WMinCm = 12

 書込ステップ列『WStpCm』に『2』列を設定して定数宣言

 Const WStpCm = 2

 読込行『ERw』を長整数型として変数宣言

 Dim ERw As Long

 読込最大行『EMaxRw』を長整数型として変数宣言

 Dim EMaxRw As Long

 書込列『WCm』を整数型として変数宣言

 Dim WCm As Integer

 【『レンジからレンジ4』_ 宣言部】

Img8_1_42

 そして、処理部を改修します。

 Excelの漢字入力帳のB列に記述されている文を1文字ずつ分解しながら、

 漢字学習帳に2行目から縦書きで書きこみ、漢字入力帳のC~F列に記述されている漢字が

 漢字学習帳に書きこんだ文字の中にあれば、該当セルを空欄のマスにして、

 併せてそのすぐ右側に、漢字入力帳のG~J列に記述されているふりがなを書きこむ。

 これは、マクロ『レンジからレンジ3』の処理部に記述されていることなので、

 マクロ『レンジからレンジ3』の処理部がブロックとしてそのままつかえます。

 マクロ『レンジからレンジ3』の処理部【ブロックA】とします。


 先ず、ExcelのB列の文字が入っているセルの最大行(X行目)を取得するプログラムコードを追加します。

EMaxRw = Range("B65536").End(xlUp).Row


 それから、漢字入力帳の最小行:『EMinRw』(2行目)から最大行:『EMaxRw』(X行目)にかけて、

 各行の処理【ブロックA】をループ処理で実行します。

 そこで、【ブロックA】をはさむように、【ブロックA】の前後に

 For ERw = EMinRw To EMaxRw

 Next ERwを追加します。

 For ERw = EMinRw To EMaxRw

   【ブロックA】

 Next ERw


 マクロ『レンジからレンジ3』までは書込列『WCm』が定数でしたが、

 今回のマクロから書込列『WCm』が変数に変わっています。

 そのため、書込列『WCm』のカウントアップが必要となります。

 漢字入力帳の最小行から最大行までのループ処理の中で、

 書込列『WCm』は行が1行増加するたびに、L列から2列ずつカウントアップしていきます。

 そのため、漢字入力帳の最小行から最大行までのループ処理の中に、WCm = WCm + WStpCmを追加します。

 更に、書込列『WCm』の初期値はL列(12列目)なので、そのループ処理の前に、WCm = WMinCm

 追加します。

 EMaxRw = Range("B65536").End(xlUp).Row

 WCm = WMinCm

 For ERw = EMinRw To EMaxRw

   【ブロックA】

   WCm = WCm + WStpCm

 Next ERw


 【『レンジからレンジ4』_ 処理部】

Img8_1_43

 このマクロを実行します。

Img8_1_44

 ExcelのL列からAD列にかけて、漢字の書きこみ問題が作成されました。




目 次

1. セルに文字を書きこむ
セルに文字を書きこむ

2. RangeとCellsでセルの位置を指定する
RangeとCellsでセルの位置を指定する

3. ループ処理でセルに値を書きこむ
ループ処理でセルに値を書きこむ

4. ループ処理でセルの値を読みとる
ループ処理でセルの値を読みとる

5. ループ処理でセルからセルへ値を代入する
ループ処理でセルからセルへ値を代入する

6. 条件分岐処理でセルの操作を分ける
条件分岐処理でセルの操作を分ける

7. 関数・プロパティ設定をつかう
関数・プロパティ設定をつかう

8. 他のレンジ/シート/ブックを更新する
他のレンジ/シート/ブックを更新する


YouTube

Excelマクロの実用版とデモ版


ブログ