• ベストアンサー

EXCELデータの縦横変換について教えて下さい

数値はランダムですか奇数行には+の値、偶数行には-の値が 入っているシートから(+/-の値は同じではありません)別 のシートに次の様に移したいのですが方法はありませんか? 移動元シート: A B C D E F 1 + 19 18 17 16 15 2 - 29 28 27 26 25 3 + 39 38 37 36 35 4 - 49 48 47 46 45 5 + 59 58 57 56 55 6 - 69 68 67 66 65 7 + 79 78 77 76 75 8 - 89 88 87 86 85 移動先シート: A B C D E 1 + 19 39 59 79 2 - 29 49 69 89 3 + 18 38 58 78 4 - 28 48 68 88 5 + 17 37 57 77 6 - 27 47 67 87 移動元の B1,B2 C1,C2 D1,D2 の組となっている値を 移動先の B1,B2 B3,B4 B5,B6 に移したいです。 データ数としては横は8個、縦は200行程度です。

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

  • ベストアンサー
noname#204879
noname#204879
回答No.1

1.移動先シートのセル A1、A2 に、それぞれ +、- を入力 2.移動先シートのセル B1、B2 に次式を入力   B1: =OFFSET(移動元シート!$B$1,(COLUMN(A1)-1)*2,(ROW(A1)-1)/2)   B2: =OFFSET(移動元シート!$B$2,(COLUMN(A1)-1)*2,(ROW(A1)-1)/2) 3.範囲 B1:B2 を右方にズズーッとドラッグ&ペースト 4.上の2行目全体のデータと3行目全体のデータを含む範囲を選択 5.当該範囲を下方にズズーッとドラッグ&ペースト

S-DEN
質問者

お礼

mike_g 様 早速に教えて貰った通りにやってみたところうまくいきました。 有り難うございました。

その他の回答 (2)

  • mitarashi
  • ベストアンサー率59% (574/965)
回答No.3

次^3善解位ですが、話の種に回答いたします。下記の様に作業行を設けて、 オートフィルタで、一列目が+の行だけ抽出して、コピー(A列を除く)し、行列を入れ替えてペースト 同様に、-の行だけ抽出、コピー、上記に続けてペースト。 1~5の数字を第一キーに、+、-を第二キー(降順)にして、並べ替え。 ............A........B........C........D........E........F ..1........a........b........c........d........e........f ..2........+.........1........2........3........4........5 ..3........-.........1........2........3........4........5 ..4........+........+........+........+........+........+ ..5........-........-........-........-........-........- ..6........+.......19.......18.......17.......16.......15 ..7........-......29......28......27......26......25 ..8........+......39......38......37......36......35 ..9........-......49......48......47......46......45

S-DEN
質問者

お礼

mitarashi 様 教えていただき有り難うございます。

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

ルール性があるので関数でも出来ます。 しかしルールをVBAで記述したほうが明確 例データ A B C D E F + 19 18 17 16 15 - 29 28 27 26 25 + 39 38 37 36 35 - 49 48 47 46 45 + 59 58 57 56 55 - 69 68 67 66 65 + 79 78 77 76 75 - 89 88 87 86 85 ーーー コード Sub test02() d = Worksheets("Sheet1").Range("A65536").End(xlUp).Row MsgBox d k = 2 m = 2 For i = 2 To d Step 2 '上下2行で異動 For j = 2 To 6 'B列からF列まで先に注目して処理 Worksheets("Sheet2").Cells(k, m) = Worksheets("Sheet1").Cells(i, j) Worksheets("Sheet2").Cells(k + 1, m) = Worksheets("Sheet1").Cells(i + 1, j) '直下行へセット k = k + 2 '2列単位で処理を考える Next j k = 2 '第2列に戻す m = m + 1 '列を右に移動 Next i End Sub ーー 結果 + 19 39 59 79 - 29 49 69 89 + 18 38 58 78 - 28 48 68 88 + 17 37 57 77 - 27 47 67 87 + 16 36 56 76 - 26 46 66 86 + 15 35 55 75 - 25 45 65 85 A列の+-はオートフィル。プログラムでも出来るが、PGを簡略化 。

S-DEN
質問者

お礼

imogasi 様 教えていただき有り難うございます。 VBAは何かしようとする度に説明書が離せない レベルなので参考にさせて頂きます。