- 締切済み
<文字列マクロについて>
<文字列マクロについて> 皆さま お力を貸して下さい。 初心者で、何もわからず書いておりますがすみません。 下記の2つのマクロを教えて下さい。 ?横に並んだ「ある行」に在るデータを「列」に変換し、 指定した数だけ並べる あいうえお ←A1セルからE1まで5列(これは状況により変わる) ↓(マクロ実行:3行同じ数だけ並べるという指定) あ →A1セルから下にひたすら、同じ文字が続き順に並ぶ あ あ い い い う う →A1セルから下に並べる(3行は指定できれば別の数字にも変えたい う え え え お お お ?規則的に並んだデータのまとまりをセットで移動する。 例だと5つの塊(これは変数とおきたい) あ A a い B b う C c え D d お E e ↓(マクロ実行) あ い う え お A B C D E ・ ・ ・ ・ a b c d e
- みんなの回答 (3)
- 専門家の回答
みんなの回答
- xls88
- ベストアンサー率56% (669/1189)
≪1≫と≪2≫を纏めてみました。 元のデータ範囲内のセルを選択しておいてからマクロを実行してください。 Dim drng As Range Dim n As Integer Dim i As Long If TypeName(Selection) <> "Range" Then Exit Sub If ActiveCell = "" Then Exit Sub n = 3 Set drng = ActiveCell.CurrentRegion With drng For i = 1 To .Columns.Count If .Rows.Count = 1 Then drng(1).Resize(n, 1).Offset((i - 1) * n).Value = drng(i).Value Else .Columns(1).Offset((i - 1) * .Rows.Count).Value = .Columns(i).Value End If Next i End With
文字列で考えるという何かの課題のようでしたので データ型をString と Variant の配列型でお答えします。 (1) Public Sub ans1() Dim str As String Dim cnt As Long Dim i As Long Dim j As Long str = Range("A1") cnt = InputBox("何回繰り返す?") For i = 1 To Len(str) For j = 1 To cnt Range("A2").Offset(cnt * (i - 1) + j) = Mid(str, i, 1) Next j Next i End Sub (2) Public Sub ans2() Dim str As Variant Dim i As Long For i = 0 To 4 str = Range("A1:A5").Offset(, i) Range("A11:A15").Offset(i * 5) = str Next End Sub (2)の str = Range("A1:A5").Offset(, i) は str(1)~str(5) に A1~A5 の値を1つずつ入れてます。 何セットの文字があるのか不明でしたので5回行っています。
- xls88
- ベストアンサー率56% (669/1189)
一例です。 ≪1≫ Dim drng As Range Dim i As Long Set drng = Range("A1:E1") For i = 1 To drng.Count Range("A1:A3").Offset((i - 1) * 3).Value = drng(i).Value Next i ≪2≫ Dim drng As Range Dim i As Long Set drng = Range("A1:E5") With drng For i = 1 To .Columns.Count .Columns(1).Offset((i - 1) * .Rows.Count).Value = .Columns(i).Value Next i End With