• ベストアンサー

エクセル関数等で出来ますか?

エクセルでA行に数値、 B行以降にA行の数値分、値が入力されています。 A B C D E 1 0 2 4 a b f d 3 2 g l 4 1 s A行の数値分、その行以下に行を挿入し、 B行以降の値を入力する方法はないでしょうか?  A B C D E 1 0 2 4 a b f d 3 a 4 b 5 f 6 d 7 2 g l 8 g 9 l 101 s 11s 宜しくお願いします。

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

  • ベストアンサー
  • jindon
  • ベストアンサー率43% (50/116)
回答No.1

関数では無理があると思うので、VBAで 下のコードをコピーして、エクセル画面のメニューバーの「ファイル」の左隣のエクセルアイコンを右クリックして、「コードの表示」を選択してVBEを起動する。 右側の空白に貼り付けして「×」をクリックしてエクセル画面の戻り、ツール→マクロ→マクロ→「ThisWorkbook.Transpose_NoRow」を選択して実行。 Sub Transpose_NoRow() Dim i As Integer, x As Variant With ActiveSheet i = 1 Do While .Cells(i, 1).Value <> "" x = .Cells(i, 1).Value If IsNumeric(x) = True And x > 0 Then .Rows(i + 1 & ":" & i + x).Insert .Cells(i, 2).Resize(1, x).Copy .Cells(i + 1, 1).PasteSpecial Transpose:=True i = i + x + 1 Else i = i + 1 End If Loop Application.CutCopyMode = False End With End Sub

oan
質問者

お礼

回答ありがとうございます。 すごいですねーVBAって いろいろなことが出来るのですね。 コードの内容はまったく解かりませんが出来ました。 VBAを勉強したいと思います。

その他の回答 (1)

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

ユーザー関数を作って、やっと下記のところまで持っていった。本当は全てVBAでやりたい。ユーザー関数を作ったので、一部VBA利用と言うところか。 (例データ) A1:F7 1 4 a b c d 2 e f 3 g h I 2 j k 1 l 5 m n o p q A1の1は便宜上必要。 (関数式)どこでも空き列で良いが、本例ではG列にした。 G1に=SUM($A$1:A1) G1をG7まで複写する。累計件数がでます。 1 5 7 10 12 13 18 (ユーザー関数)aa()を定義。準備の道具的な関数。 Sheet1のA列の何行目を参照すれば良いかを割だし。 Function aa(a) Dim sh1 As Worksheet Set sh1 = Worksheets("sheet1") d = sh1.Range("A65356").End(xlUp).Row r = a.Row For i = 1 To d If (r > sh1.Cells(i, "G")) And (r <= sh1.Cells(i + 1, "G")) Then aa = i + 1 Exit Function End If Next i End Function (ユーザー関数)bb()を定義。準備の道具的な関数。 Sheet1のB列以右の何列目を参照すれば良いかを割だし。 Function bb(a) Dim sh1 As Worksheet Set sh1 = Worksheets("sheet1") d = sh1.Range("A65356").End(xlUp).Row r = a.Row For i = 1 To d If (r > sh1.Cells(i, "G")) And (r <= sh1.Cells(i + 1, "G")) Then bb = r - sh1.Cells(i, "G") Exit Function End If Next i End Function (データを採ってくる関数式) Sheet2のA2に=INDEX(Sheet1!$B$1:$F$7,aa(A2),bb(A2)) といれ、A18まで複写。 (結果)A2のaからA18のqまで入る。 (注) ・式を複写した下の方の行はエラー表示を出さなくする件は略 ・間に4 a b c d 等を挟む件は略させていただいた。済みません質問条件 違反です。 ・上記ワーク列をG列にしましたが、X列に例えば設定したら、上記VBAの"G"を(5箇所を)全て"X"に変えて下さい。 ●上記がややこしいと感じられたら、こう言うタイプの問題は、関数式による解決に向いてないことを悟ってください。関数式に拘る回答者が多いので、参考までにやって見ました。

oan
質問者

お礼

回答ありがとうございます。 関数であればもしかして理解できると 安易に考えたのですがまったく まとはずれだったようです。 回答者様のおっしゃるように 向いてないということを悟りました。 丁寧にありがとうございます。 VBAを勉強したいと思います。

関連するQ&A