トップページ⇒tech
5コメント3KB

エクセルでVBA

■ このスレッドは過去ログ倉庫に格納されています
0001ベテランへの道 NGNG
エクセルでVBAをつかって、
行と列を対角線にそって
反対にするプログラムを
どなたか教えてくれませんか?
0002名無しさん@お腹いっぱい。 NGNG
こういう分かる分からないの次元の質問してくる人って、
もうどうしようもないんだろうね。
0003電化製品 NGNG
'手元に資料がないので記憶だけで書きますが
’間違ってたらごめんちゃい。
private sub book()
  Dim Gyou(10@`1000) as String ’*列(A〜Z任意、カウント)
Dim i as Integer ’カウンター(VBは宣言する必要はない、そのときバリアント型
  Dim j as Integer '行を数える

j=0
for i=1 to 1000'(もしくは、行の長さを取得する値をここに入れて下さい。)
  
Gyou(0@`i)=Worksheets("sheet1").Range("A" & i) 'Aiのセルテキスト取得
'0をAにした。
if Gyou(i) = "" then :Exit for'空っぽなら終了。Aだけでなく基準にする列に注目すればよい
Gyou(1@`i)=Worksheets("sheet1").Range("B" & i)
   Gyou(2@`i)=Worksheets("sheet1").Range("C" & i)   
Gyou(3@`i)=Worksheets("sheet1").Range("D" & i) '列を取得E、F・・以降は勝手にかいてね
    j=j+1
next i
'ここまでで、A、B、C・・のそれぞれの行を取得できました。
  ’後は行を列に直すだけです。
  'jには行の長さが入っています。
  ’A〜Zを越える場合、アスキーコードかなにかで、連番になっているので
  ’それをここに書いて、A〜(任意の無限の長さ)に対応することも可能。
  ’つーかここまで書いていて、行の長さは軽くA〜Zを越えるなぁ
  ’アスキーコード chr(65)=Aなわけ
Dim Box as String
Dim k(1) as integer
i=0:k(0)=0:k(1)=0
  for i=1 to j
'A-Zは25?なので
    if (65 + k(0)) > 90 then:k(0)=0:k(1)=k(1)+1'にリセット
if k(1)=0 then
Box=chr(65 + k)
else
Box=chr(65 + k) & k(1) 'A...Z@`A1....Z1@`A2...と具合だったよね?
end
    Worksheets("sheet1").Range(Box & i)=Gyou(0@`i) ’行を列に直していく
    Worksheets("sheet1").Range(Box & i)=Gyou(1@`i)
    Worksheets("sheet1").Range(Box & i)=Gyou(2@`i)
     'この部分もGyou(0@`1)〜Gyou(*@`i)まで宣言できるようにすればベストかも
k(0)=k(0)+1
  Next
         
end sub

  ’実行してないのでどういう動作するか分りません
  ’エラーでまくりと思います。
  ’マクロの記録?の方法が手動であるみたいなので
  ’慣れていない場合は、そちらを試してみては?
  ’
0004名無しさん@お腹いっぱい。 NGNG
形式を選択してコピーに
行列を入れかえてコピーつーのがあるだろうが。
0005名無しさん@お腹いっぱい。 NGNG
形式を選択して貼り付けか。
MS用語はわからんぜ。
■ このスレッドは過去ログ倉庫に格納されています