• ベストアンサー

Excel VBAでのセルの範囲指定

Excel2000 Win2000です。 あるbook「A.xls」にある表「a」を「B.xls」にコピペ&行列反転するマクロを作っています。 A.xlsの表「a」のサイズが作成の都度変わるため、 B.xlsからサイズの取得をする為、 Workbooks.Open Filename:="A.XLS" I1 = 1 ' 行数の取得 DO WHILE CELLS(I1,1).VALUE <> ""  I1 = I1 + 1 LOOP I2 = 1 '列数の取得 DO WHILE CELLS(1,I2).VALUE <> ""  I2 = I2 + 1 LOOP として、行と列の数を取得しています。 で、ここまで来てセルの範囲をどうやって指定していいのか分からなくなりました。 例えば、I2の値をExcelの列のアルファベット表記に変える等、 なにかいい方法はありませんか??

質問者が選んだベストアンサー

  • ベストアンサー
  • PAPA0427
  • ベストアンサー率22% (559/2488)
回答No.1

う~ん。 列のアルファベットですか…。A~Zなのでchr関数で、数値を文字に変換すれば出来そうですね。 例えば、I2の値が1だったら(Aの値は65)CHR(64+I2)とすれば、”A”の文字が取得できます。 I2の値が26を超える場合は、数値を26で割って上位一桁と下位一桁で別々に文字を作る用にすれば、できるでしょう。 でも、range関数でこういう指定が出来ますが、こっちの方が簡単ですよ。 range(cells(1,1),cells(I1,I2)).・・・ で記述できますよ。

noname#6434
質問者

お礼

早速の返事ありがとうございます。 え゛っ!! RangeってCellsが使えるんですか・・・ てっきりRange("A1:Z1")って言う使い方しかできないと 思っていました・・・ もう一度ヘルプをよく読んでみます。 どうも、ありがとうございました。

その他の回答 (2)

  • jukate
  • ベストアンサー率25% (14/56)
回答No.3

Sub hanten() For m = 1 To 100 For n = 1 To 100 Sheet2.Cells(n, m) = Sheet1.Cells(m, n) Next n Next m Sheet2.Activate Cells.Select Selection.Copy Dim bookb As Excel.Application Set bookb = New Excel.Application bookb.Workbooks.Open ("c:\B.xls") bookb.Visible = True bookb.ActiveSheet.Paste End Sub 見当違いかもしれないですが、・・・ 範囲ぐらいは自分で考えてください。 もう少し手間かかります、それから 人それぞれですし。

noname#6434
質問者

お礼

ありがとうございます。 これだと、表のサイズが100x100で決まってしまいます。 又、シート全体のコピぺになってしまいますし、行列の反転をしている為、反転後の列の数が足らなくなってしまいます。 ただ、行が256迄しか使えない事に気が付きました。

  • imogasi
  • ベストアンサー率27% (4737/17069)
回答No.2

下記が参考になれば。 (1)列指定 (2)行指定 (3)最下行、最右列がわかっているときのA1セルからの範囲指定 Sub test04() i1 = 3: i2 = 4 Rows(1).Select Columns(2).Select Range(Cells(1, 1), Cells(i1, i2)).Select End Sub

noname#6434
質問者

お礼

早速の返事ありがとうございます。 え゛っ!! RangeってCellsが使えるんですか・・・ てっきりRange("A1:Z1")って言う使い方しかできないと 思っていました・・・ もう一度ヘルプをよく読んでみます。 どうも、ありがとうございました。

関連するQ&A

専門家に質問してみよう