並べ替えするには?
ただいまVBA学習中です。
sheet1に次のような文字列がセルに入力されているとします。
3列で30行あります。
A列 B列 C列
1行 あ い う
2行 え お か
...以下30行まで続く。
これらを
sheet2に
A列
あ
い
う
え
お
か
のようにひとつの列へ縦にするにはどのような記述になりますか?
私なりの考え方ですが
セルのスタート位置はシート1のA1とします。
シート1にて
・あ い う と順番に配列に格納
・セルを左に2つ下に1つ移動
この動作を30回繰り返す(for next 使えばでいいですよね?)
シート2に移動してA1から下方向へ
格納された文字列を入力する。
と、考えてみたものの記述の仕方がわかりません。
力貸してください。
No.4ベストアンサー
- 回答日時:
> 追加の質問したいのですが・・・
こんな感じでどうですか。
実行時、どのシートがアクティブになっていても構わないコードになっていますが、
"Sheet1" アクティブが条件なら Sheets("Sheet1"). が不要でチョット簡単になります。
Sub test()
Dim Rw As Long
Dim Rw2 As Long
Dim MaxRow As Long
MaxRow = Range("E65536").End(xlUp).Row
If MaxRow = 1 Then Exit Sub
Sheets("Sheet2").Columns(1).ClearContents
Rw2 = 1
For Rw = 2 To MaxRow
With Sheets("Sheet2")
.Range("A" & Rw2).Value = Range("E1").Value
.Range("A" & Rw2 + 1).Value = Sheets("Sheet1").Range("E" & Rw).Value
.Range("A" & Rw2 + 2).Value = Sheets("Sheet1").Range("F1").Value
.Range("A" & Rw2 + 3).Value = Sheets("Sheet1").Range("F" & Rw).Value
.Range("A" & Rw2 + 4).Value = Sheets("Sheet1").Range("G1").Value
.Range("A" & Rw2 + 5).Value = Sheets("Sheet1").Range("G" & Rw).Value
.Range("A" & Rw2 + 6).Value = vbNullString
Rw2 = Rw2 + 7
End With
Next Rw
End Sub
No.3
- 回答日時:
相当、邪道ですがsheet2の1行目に見出しがあるとして
Sub test()
Dim rngS As Range
For Each rngS In ActiveSheet.UsedRange
rngS.Copy Sheets(2).Range("A65536") _
.End(xlUp).Offset(1)
Next rngS
End Sub
上記であれば何行でも可能ですが?
勘違いならすいません。
この回答への補足
追加の質問したいのですが、みなさまよいでしょうか。
E列 F列 G列
1行 問題 解答 解説
2行 あああ いいい ううう
3行 えええ おおお かかか
4行 ききき くくく けけけ
・・・このようなのが30行ぐらいあります。
今後も増えます。
とあるものを シート2のA列に
問題
あああ
解答
いいい
解説
ううう
「空白のセル」
問題
えええ
解答
おおお
解説
かかか
「空白のセル」
問題
ききき
解答
くくく
解説
けけけ
「空白のセル」
・・・以下繰り返し。
の場合はどうなるでしょうか?
ありがとうございます。
なんか、だんだん難しくなってきてる印象受けてます。
でもこれがわかるとなにかと便利なんでしょうね。
(1)
For Each rngS In ActiveSheet.UsedRange
の部分は「アクティブシートの記入済みセルそれぞれについて」という意味と解釈しました。
rngS.Copy Sheets(2).Range("A65536").End(xlUp).Offset(1)
はA列すべてって意味かな?たぶん。
で、正しく作動したのですが、なんか不思議な感じします。セルをひとつづつ指定せず、範囲という形で指定していますが、順序よく整列されてシート2に出力されました。
なんでだろ?
RANGEは 左から右 上から下 という順番で処理してくれているようですね。
No.1
- 回答日時:
こんばんは。
あくまでも一つの例です。
Public Sub MySort()
Dim MyStr(90) As String
Dim cnt As Integer
cnt = 1
For r = 1 To 30
For c = 1 To 3
MyStr(cnt) = Sheet1.Cells(r, c)
cnt = cnt + 1
Next c
Next r
cnt = 0
Sheet2.Activate
Range("a1").Select
For r = 1 To 90
Cells(r, 1).Value = MyStr(r)
Next r
End Sub
#1~#3の皆様、まずはお礼を申し上げます。
ただいま、皆様から教えていただいた内容を
もとに、VBAを動かしてます。
for each とrangeの使い方についての例文が
記載されているサイトも探してます。
自分用に書き換えしているのですが
ちょっとうまく動いてくれないで原因を
調べてます。
ですので配点はもう少しお待ちください。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
- ・ゆるやかでぃべーと タイムマシンを破壊すべきか。
- ・歩いた自慢大会
- ・許せない心理テスト
- ・字面がカッコいい英単語
- ・これ何て呼びますか Part2
- ・人生で一番思い出に残ってる靴
- ・ゆるやかでぃべーと すべての高校生はアルバイトをするべきだ。
- ・初めて自分の家と他人の家が違う、と意識した時
- ・単二電池
- ・チョコミントアイス
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
種類ごとに横に並んだ数字を別...
-
Excel2000 VBA ダブルクリック...
-
EXCELで2つの数値のうち大きい...
-
エクセルで二つの数字の小さい...
-
Excelで隣のセルと同じ内容に列...
-
PowerPointで表の1つの列だけ...
-
エクセルで最初のスペースまで...
-
エクセルで特定の文字が入って...
-
エクセル 文字数 多い順 並...
-
エクセルでオートフィルタのボ...
-
エクセルで時刻(8:00~20:00)...
-
エクセルで、2種類のデータを...
-
Excelで半角の文字を含むセルを...
-
エクセル(勝手に太字になる)
-
Excel関数:「0」を除いた標準...
-
「B列が日曜の場合」C列に/...
-
えエクセルで○は1とし△は0.5で...
-
エクセルのオートフィルタで最...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
excelのマクロでrangeの選択が...
-
エクセルの表示形式を保ったま...
-
Excel VBA For Each Next構文...
-
Excel2000 VBA ダブルクリック...
-
エクセル 1つのセル毎に入力...
-
EXCELのマクロで一覧表に...
-
エクセルで別シートにある各々...
-
Excel VBAのComboboxのRemoveItem
-
Excelのデータベース活用...
-
Gメールの内容をスプレッドシ...
-
エクセルで項目抽出
-
【ExcelVBA】A列に値のある行を...
-
vbaにて並べ替えしたい。
-
EXCEL 行内のデータを2行に分け...
-
VLOOKUPのような操作ができるマ...
-
EXCEL(エクセル)で0.001以下...
-
ISERROR関数
-
エクセルでスケジュール管理
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
おすすめ情報