色彩を教える人になるための講座「色彩講師養成講座」の魅力とは>>

Windows10、Excel2007

添付画像のように、1列にデータが並んでいます。先頭と、文字と文字の間には、スペース(␣)があります。

␣[あ]␣[あ]␣[あ]␣[い]␣[い]␣[い]␣[う]␣[う]␣[う]␣……

こちらを、以下のように並べ替えたいです。

[あ]␣[あ]␣[あ]
[い]␣[い]␣[い]
[う]␣[う]␣[う]
[…]␣[…]␣[…]
[…]␣[…]␣[…]
※以下のように、列の先頭に ␣ があっても構いません。Excelで、後から削除できるからです。

␣[あ]␣[あ]␣[あ]
␣[い]␣[い]␣[い]
␣[う]␣[う]␣[う]
␣[…]␣[…]␣[…]
␣[…]␣[…]␣[…]

こちらを実現するマクロがありましたら、教えてください。お願いします。

「Excelの1列に並んだデータを、規則的」の質問画像
gooドクター

A 回答 (8件)

こんな書き方でも出来そうです。



Sub sample()
Dim i As Long
For i = 1 To Cells(1, Columns.Count).End(xlToLeft).Column
Cells(1, i).Copy Range("A10:F10")(i)
Next i
End Sub
    • good
    • 1
この回答へのお礼

ママチャリさん、ご回答ありがとうございます。

同じ目的を達成させるのにも、いろんな記述の仕方があるのですね。勉強になります。

お礼日時:2021/07/02 17:27

VBAではありませんが、以下のような数式を表示開始したいセルに記述し、


右方向へ6列になるまでコビーし、それを纏めて下方向へコピーするという方法でも実現可能です。
添付画像をご覧ください。
A7から表示開始するよう、A7に
=IF(INDEX($1:$1,(ROW(A1)-1)*6+COLUMN(A1)+1)="","",INDEX($1:$1,(ROW(A1)-1)*6+COLUMN(A1)+1))
を記述し、これをF7までコピーしたうえで、下方向へコピーしています。
「Excelの1列に並んだデータを、規則的」の回答画像8
    • good
    • 1
この回答へのお礼

goomaniaさん、ご回答ありがとうございます。

これは驚きです。まさか、関数だけで実現できるとは…。

お礼日時:2021/07/02 17:28

[No.5]補遺、


ひょっとして次式の方をお好み?
A6: =IF(COLUMN(A1)>6,"",OFFSET($B$1,,(ROW(A1)-1)*6+COLUMN(A1)-1)&"")
    • good
    • 1
この回答へのお礼

mike_gさん、ご回答ありがとうございます。

こんなに短いスクリプトで実現できるのですね。

お礼日時:2021/07/02 17:27

添付図参照(Excel 2019)


↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
「Excelの1列に並んだデータを、規則的」の回答画像5
    • good
    • 1
この回答へのお礼

mike_gさん、ご回答ありがとうございます。

図まで付けていただいて、とても理解しやすいです。

お礼日時:2021/07/02 17:26

No.1で書いたの、ちょっと間違ってた。


B,C列は空欄入るんですね!

Sub Macro()
  l = Cells(1, Columns.Count).End(xlToLeft).Column
  m = 7
  n = 1
  For i = 2 To l Step 2
    If n > 5 Then
      n = 1: m = m + 1
    End If
    Cells(1, i).Copy
    Cells(m, n).Select
    ActiveSheet.Paste
    n = n + 2
  Next
End Sub
    • good
    • 1
この回答へのお礼

zongaiさん、間違いではございませんが、私の意図通りのお答え、ありがとうございます。

お礼日時:2021/07/02 17:26

No2です。



ちょっと荒かったので、普通にやるなら

Sub Sample()
Set r = Range("A7:E7")
For col = 2 To Cells(1, Columns.Count).End(xlToLeft).Column Step 6
 r.Value = Cells(1, col).Resize(, 5).Value
 Set r = r.Offset(1)
Next col
End Sub


コピペで転記したい場合(書式も含む)は、4行目を
 Cells(1, col).Resize(, 5).Copy r
に変えればよいです。
    • good
    • 1
この回答へのお礼

fujillinさん、書式も含めてコピーペーストできるのですね。ありがとうございます。

お礼日時:2021/07/02 17:25

こんばんは



色がどうなっているのかよくわからないけれど、値を転記できれば良いのであれば・・・

Sub Sample()
Set r = Range("A7:E100")
r.FormulaLocal = "=OFFSET($A$1,,ROW(A3)*6+COLUMN(B1)-19) & """""
r.Value = r.Value
End Sub

とか。
ひとまず、範囲はテキトーです。
    • good
    • 1
この回答へのお礼

fujillinさん、ご回答ありがとうございます。

 こんな短いスクリプトで実現可能なのですね。とても勉強になりました。

お礼日時:2021/07/02 17:25

Sub Macro()


  l = Cells(1, Columns.Count).End(xlToLeft).Column
  m = 7
  n = 1
  For i = 2 To l Step 2
    If n = 4 Then
      n = 1: m = m + 1
    End If
    Cells(1, i).Copy
    Cells(m, n).Select
    ActiveSheet.Paste
    n = n + 1
  Next
End Sub


これでどう?
    • good
    • 1
この回答へのお礼

zongaiさん、早速ご回答ありがとうございます。

 素晴らしいです。

お礼日時:2021/07/02 17:24

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

このカテゴリの人気Q&Aランキング