(2)A1形式をCellsプロパティに書き換え
ここでは、自動記録されたA1形式をCellsプロパティに書き換えの方法をより
理解できるように各種ケースを記述します。

[1]A1形式の列を数字に変更(256→IV列までの対照一覧表)
まず、書き換え例の前にA1形式の英字と数字の対象表があれば便利なので表4に記載します。

【下記クリックで表示】 (使用例:Range("R2")はCells(2,18)になりますがR→18 を見る)
【A1形式の数字対照表】


【参考135】 ワークシート関数「COLUMN」の使用例
数字対象表でなくても、ワークシート関数「COLUMN」でも「IV」の256までは英字を数字に変換できます。
この「COLUMN」関数は、VBAで使用できるワークシート関数ではないので、セルに直接記入して使用します。
具体的にはインプットボックスに入力した英字を引数に、A1セルに記入したCOLUMN関数で数字に直して表示。
Sub 書換え1_1()
    msg = "数字に変える英字を入力してください。"
    mozi = Application.InputBox(msg, "英字の指定", , Type:=2)
    Cells(1, 1).Formula = "=COLUMN(" & mozi & "1 )"
End Sub


【参考136】列はExcel 2007で大幅に増えました
数字対象表は便利に使用していましたが、Excel2003の「IV:256列」が、Excel2007では「XFD:16384列」と増え
たので拡大分は使用できません。
ワークシート関数「COLUMN」も確認しましたが、IV以降ではエラーになります。
なお、列以外でも大幅に機能が拡張されましたたが内容は表5を参考にしください。
【表5 Exce2007で引き上げられた機能】



[2]「XFD→16384列」まで計算できるマクロ例
英文字列を入力で数字列に変換マクロですが、Excel 2007/2010対応用「XFD→16384列」まで計算できます。
画面19 英字列を数字に変換例


Sub 書換え1_2()
Dim mozi1 As String  '1桁目文字
Dim mozi2 As String  '2桁目文字
Dim mozi3 As String  '3桁目文字
Dim keta As Integer  '文字数
Dim suzi As Integer    '数字
 
    msg = "数字に変える「英文字」を入力してください。" _
    & Chr(10) & "(英文字はA〜XFDまで)"
    mozi = Application.InputBox(msg, "英文字指定", , Type:=2)
         If mozi = False Then Exit Sub
 
mozi = StrConv(mozi, 1)
keta = Len(mozi)
    If keta = 3 Then
        mozi3 = Mid(mozi, 1, 1): mozi2 = Mid(mozi, 2, 1): mozi1 = Mid(mozi, 3, 1)
    ElseIf keta = 2 Then
        mozi2 = Mid(mozi, 1, 1): mozi1 = Mid(mozi, 2, 1)
    ElseIf keta = 1 Then
        mozi1 = mozi
    End If
 
If mozi3 <> "" Then
    suzi = (Asc(mozi3) - 64) * 26 * 26
End If
If mozi2 <> "" Then
    suzi = suzi + (Asc(mozi2) - 64) * 26
End If
    suzi = suzi + Asc(mozi1) - 64
  MsgBox ("英字セル列「" & mozi & "」は数字では【" & suzi & "】です」")
End Sub


[3]「16384→XFD列」まで計算できるマクロ例
以下の「書換え1_3」マクロは、前述の逆で「数字列を英文字に変換」です。
A1形式の英文字列を知りたい時利用できます。
(実行例は画面20参照)。
画面20 数字列を英文字に変換例


Sub 書換え1_3()
Dim su1 As Integer    '1桁目
Dim su2 As Integer    '2桁目
Dim su3 As Integer    '3桁目
Dim suzi As String
    msg = "英数字に変える「数字」を入力してください。" & Chr(10) _
            & "(変換できる数字は 1 〜18278 まで)"
    suzi = Application.InputBox(msg, "数字の指定", , Type:=1)
        If suzi = False Then Exit Sub
   su3 = Int((suzi - 27) / 26 / 26)
   If su3 > 26 Then MsgBox "数字オーバーで変換できません": Exit Sub
   su2 = Int((suzi - 1 - (su3 * 26 * 26)) / 26)
   su1 = suzi - (su3 * 26 * 26) - (su2 * 26)
 
   If su3 > 0 Then
      eimozi = Chr(su3 + 64)
   End If
   If su2 > 0 Then
      eimozi = eimozi & Chr(su2 + 64)
   End If
   If su1 > 0 Then
      eimozi = eimozi & Chr(su1 + 64)
   End If
MsgBox ("セル列「" & suzi & "」は英文字では【" & eimozi & "】です」")
End Sub
※eimozi = Chr(su3 + 64)→数字をアスキーコードの英大文字へ変換
 

以下も「数字列を英文字に変換」ですが、セルのアドレスから取得の例です。
Sub 書換え1_3b()
Dim aaa As String, suzi As Integer
    msg = "英数字に変える「数字」を入力してください。"
    suzi = Application.InputBox(msg, "数字の指定", , Type:=1)
        If suzi = False Then Exit Sub
 
    aaa = Split(Cells(1, suzi).Address, "$")(1)
 
MsgBox ("指定セル「" & suzi & "」列は英文字【" & aaa & "】列です」")
End Sub




(3)Cellsプロパティへの書き換えマクロ例
前説明が長くなりましたが、以降が自動記録されたA1形式をCellsプロパティ
への書き換え例です。
各プロシージャとも、書換え2_1aのように「a」が付いている方がCellsプロパティ
で記述してあります。中級ベル以上の方であれば常識の範囲ですが、
マクロを組んでいる時一寸忘れた場合に参考にして下さい。


[1]セル1個指定の置き換え
Sub 書換え2_1()
   Range("A2").Select
End Sub
----------------------------------
Sub 書換え2_1a()
   Cells(2,1).Select
End Sub


[2]複数セルの置き換え
Sub 書換え2_2()
    Range("B2:F9").Select
End Sub
----------------------------------
Sub 書換え2_2a()
    Range(Cells(2, 2), Cells(9, 6)).Select
End Sub


[3]1行指定の置き換え
Sub 書換え2_3()
    Rows("5:5").Select
End Sub
----------------------------------
Sub 書換え2_3a()
   Rows(5).Select
End Sub


[4]複数行指定の置き換え
Sub 書換え2_4()
    Rows("5:7").Select
End Sub
----------------------------------
Sub 書換え2_4a()
  Range(Rows(5), Rows(7)).Select
End Sub


[5]1列指定の置き換え
Sub 書換え2_5()
    Columns("D:D").Select
End Sub
----------------------------------
Sub 書換え2_5a()
Columns(4).Select
End Sub


[6]複数列指定の置き換え
Sub 書換え2_6()
    Columns("D:E").Select
End Sub
----------------------------------
Sub 書換え2_6a()
   Range(Columns(4), Columns(5)).Select
End Sub


[7]離れている複数列指定の置き換え
Sub 書換え2_7()
    Range("A3:A16,F3:F16").Select
End Sub
----------------------------------
Sub 書換え2_7a()
   Union(Range(Cells(3, 1), Cells(16, 1)), _
   Range(Cells(3, 6), Cells(16, 6))).Select
End Sub


[8]ワ−クシ−ト全セルの指定
 
Sub 書換え2_8a()
Cells.Select
End Sub


【参考137】アクティブでないブック/シートの指定
これまでの説明はアクティブシートを対象にした記述例ですが、アクティブで
ないシートが対象の場合はシート名またはブック名も指定します。
Sub 書換え9()
    Cells(1, 1) = 111
    Worksheets("Sheet1").Cells(2, 1) = 222
    ThisWorkbook.Worksheets("Sheet1").Cells(3, 1) = 333
    Workbooks("1-2置換え.xls").Worksheets("Sheet1").Cells(4, 1) = 444
End Sub




(4)一寸忘れた時見たいセルデータの各種削除例
削除としては以下の方法があります。
(Deleteメソッドも例として記述したが、時間が多く掛かることもあり
特別な場合以外は使用を避けた方がよい)
(1) Range("A1:D10").Clear              '→全てクリア
 
(2) Range("A1:D10").ClearContents       '→セルの内容(数式、値、文字列)をクリア
 
(3) Range("A1:D10") = ""              '→セルの内容(数式、値、文字列)をクリア
 
(4) Range("A1:D10").ClearFormats         '→書式(背景色、罫線、フォント名)をクリア
 
(5) Range("A1:D10").Delete             '→セル範囲 A1:D10 を削除
 
(6) Range("A1:D10").Delete Shift:=xlShiftToLeft   '→空いたスペースは右側にあるセル
                                                          '→を左にシフトして埋める。(5)と同じ結果


【参考138】アクティブセルとセレクトセルの相違点
下記で判るように複数セルを選択またはアクティブにしても、実際にアクティブになっている
(ActiveCell.Valueで入力可)セルは1個だけです。

(A1:C3)範囲を選択して、アクティブセルへ入力
Sub Record1()
    Range("A1:C3").Select
    ActiveCell.Value = "abcd"
End Sub


(A1:C3)範囲を選択して、選択箇所へ入力
Sub Record2()
    Range("A1:C3").Select
    Selection.Value = "ABCD"
End Sub


(A1:C3)範囲をアクティブして、アクティブセルへ入力
Sub Record3()
    Range("A1:C3").Activate
    ActiveCell.Value = "イロハニ"
End Sub


(A1:C3)範囲をアクティブして、選択箇所へ入力
Sub Record4()
    Range("A1:C3").Activate
    Selection.Value = "あいうえお"
End Sub



【戻る】    【Top画面】   【HPへ】