- ベストアンサー
エクセルのマクロで教えてください
excelのマクロで2つお伺いします 1.右のセルの内容を下に移す A 1 2 3 4 B 3 4 6 を A 1 A 2 A 3 A 4 B 3 B 4 B 6 メニューから下に何行か行を挿入して おいて特殊ペーストで行列を いれかえるとすればできたのですが 何通りもある場合マクロを使って できないでしょうか 2.リレーショナルへの対応 A 1 2 B 2 3 4 1 あ う 2 い 3 お 4 か き 左側1列目は右に続く(個数不定)記号を もっているとして1番目(A、、) 2番目(1、、)、3番目(あ、、)を 結び付けたいのです 上の例ですと A あ う い B い お か き をマクロで出力できますでしょうか ご存知の方いらっしゃいましたら 教えてください。よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
前半の回答例 Sub test01() Dim cl As Range i = 1 For Each cl In Selection If cl = "" Then Else Cells(i, "G") = cl i = i + 1 End If Next End Sub (1)元データを範囲指定して、実行してください。 (2)ボタンなどを貼りつけ、クリックイベントと 関連づけて下さい(略) (3)セット先の列を決めるのは、INPUTBOXででも策を考えて下さい(略)。上記コードではG列と仮定している。スタートも第1行からになっていますので指定できるように考えてください。
その他の回答 (2)
- sakenomo
- ベストアンサー率52% (35/67)
#2です。 記入漏れです。 もうひとつの前提として、参照元データのセル範囲は セルA1を使う必要があります。 (質問例だと、セルA1に、Aが入る)
- sakenomo
- ベストアンサー率52% (35/67)
後半の回答例です。 新しいシートを挿入して結果を出力します。 なお、このマクロは以下の前提で書きました。 参照元、参照先のデータに隣接するセルは空白 参照元の番号は必ず参照先にある Sub test() Dim myRng As Range, Trng As Range, Ws As Worksheet Dim i As Integer, c As Range Set myRng = Range("A1").CurrentRegion Set Ws = ActiveSheet ActiveWorkbook.Sheets.Add myRng.Columns(1).Copy Destination:=Range("A1") Set Trng = Range("B1") i = 2 With Application.WorksheetFunction For Each c In myRng.Offset(0, 1) If c.Value <> "" Then p = .Match(c.Value, Ws.Columns(1), 0) If c.Row > Trng.Row Then Set Trng = Cells(c.Row, 2) End If Do Trng.Value = .Index(Ws.Rows(p), 1, i) If Trng.Value <> "" Then Set Trng = Trng.Offset(0, 1) i = i + 1 Else i = 2 Exit Do End If Loop End If Next End With End Sub
お礼
実行できました。ありがとうございます。こちらもマクロを読んで応用ができるようにしたいと思っています。どちらの方にも20点いれさせていただきたかったのですがシステム上できないので順番にして終了いたします
お礼
ありがとうございます。実行できました。応用を考えてみます