2007年6月16日土曜日

第4回目 セルの範囲を取得する

第4回目 セルの範囲を取得する

 事例に戻り、その中の一つの機能を解説します。
□セルの範囲を入力し、利用可能なように加工します。
 ここでいうセルの範囲は、よこ見出し行の範囲とデータ部の範囲のことです。
 たて見出し列の範囲は、最初の一列と決め付けます。
 入力すべきものは、列の範囲と行の範囲が二つです。つまり、よこ見出しとデータ部の列の範囲は通常は同一となるからです。
 入力形式は、a:h,1:5,6:25 としました。それぞれ、列の範囲、よこ見出し行の範囲、データ部の行範囲です。
 この入力値から、それぞれの要素を分解することになります。
 文字関数が必要となります。
hanni = InputBox("列の範囲、よこ見出し行の範囲、データ部の行範囲を入れてください。例えば  ", ,"b:h,1:5,6:25")
 で、入力値を与えます。
 各要素に分解するためには、:及び,の位置が大事になってきます。
 そのためには、InStr関数をつかいます。
 書き方は、 p1=InStr(hanni,":")とかく。p1は指定した文字の位置で、数値です。
この例では、p1=2となります。
そこで、
  retu1 = Left(hanni,p1-1)で、bが取得できます。
   hanni = Mid(hanni,p1+1) '前を切り、h以降の文字にします。
後は、これらのことの繰り返しになります。
    p1=InStr(hanni,",") 'p1=2
    retu9 = Left(hanni,p1-1)で、hが取得できます。
   hanni = Mid(hanni,p1+1) '前を切り取り、1以降の文字にします。
このようにして、さらに、gyo11、gyo19、gyo21、gyo29を取得します。
よこ見出し、データの範囲は次のようになります。
 yoko_midashi = "$" & retu1 & "$" & gyo11 & ":$" & retu9 & "$" & gyo19
data_bu = "$" & retu1 & "$" & gyo21 & ":$" & retu9 & "$" & gyo29
  二つをあわせたものは
zentai = "$" & retu1 & "$" & gyo11 & ":$" & retu9 & "$" & gyo29
  
Range(yoko_midashi).Select で、よこ見出し部が選択されます。
選択してどうするか。コピーするのです。
 
 次にいきましょう。
 新しいシートを作ります。
  Dim sh As Worksheet 'Worksheetというオブジェクトの変数をshと言う名で宣言します。
Dim Name As String '文字列型の変数 Name を宣言

Set sh = Worksheets.Add 'シートを追加
sh.Name = "チェックシート" 'シート名

 これで、チェックシートという名のシートが追加されます。
Dim文は、変数の定義するものです。
内容はコメントに書いてある通りです。

次にいきましょう。
 このチェックシートに表をコピーします。
 コピーの方式としては、すべてをコピーします。
 この命令は…
 ここでマクロの記録を使います。
 エクセルの操作で、コピペの仕方はわかっていると思います。試しにコピペを行い、そのときのマクロを記録させて、それを使用するのです。
 その仕方は次のようになる。
 エクセルの世界での処理です。
 Alt、T、M、Rでマクロの記録を始めます。
 このときにマクロの名前の指定のボックスが開かれますが、自動的に振られた名前を覚えておいてください
 通常の仕方で、全部を指定したコピペをしてください。
 おわったら、Alt、T、M、Rでマクロの記録を終わりにします。
 Alt+F11でマクロの世界に移り、モジュールの中から先ほどの名前のマクロを探してください。処理部を貼り付ければ、その部分のプログラムはだいたい完成します。
 【例】
 Sub Macro1()
'
' Macro1 Macro
' マクロ記録日
'
Range("C16:F20").Select   '←ここを変える。Range(zentai).Selectとか
Selection.Copy
Range("H16").Select     '←ここを変える
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
End Sub

 同じシート上のコピペになってしまう。
 あれあれ、今どこのシートにいるのだろうか。
 それは次回。

0 件のコメント: