エクセルシートで、Sheet1に種類ごとに横に並んだ数字があり、そのデータをSheet2の指定のセルに数字の小さい順に縦に並び替えしたいのですが、どのようなVBAを書込んだら可能でしょうか?ご教授願います。
例
Sheet1
A B C D E F G
1
2 りんご 8 3 12
3 みかん 2 9
4 バナナ 4 3 7
5
6
このデータを下記のように変更して貼り付け
Sheet2
A B C D E F G
1
2
3 りんご 3
4 8
5 12
6 みかん 2
7 9
8 バナナ 3
9 4
10 7
11
No.1
- 回答日時:
かなり練らないと答え出ませんね。
。。ちょっと問題丸投げしすぎじゃないでしょうか?
ちなみにソートがなければ以下のような感じで
作ったら出来ますよね?
ここから発展しそう。。。
Dim i As Long 'sheet1の横
Dim j As Long 'sheet1の縦
Dim k As Long 'sheet2の縦
i = 1
j = 1
k = 1
Do While Worksheets("sheet1").Cells(j, i).Value <> ""
Worksheets("sheet2").Cells(k, 1).Value = Worksheets("sheet1").Cells(j, i).Value
i = i + 1
Do While Worksheets("sheet1").Cells(j, i).Value <> ""
Worksheets("sheet2").Cells(k, 2).Value = Worksheets("sheet1").Cells(j, i).Value
i = i + 1
k = k + 1
Loop
i = 1
j = j + 1
Loop
No.2ベストアンサー
- 回答日時:
面白そうなのでやってみました。
ただ、例示のセルの配置がよくわからないのでSheet1のりんご等はA列に
数値はB列から右へあるものとし、Sheet2のA1以下に転記するようにしました。
品名の列や数値の行に途中の空白セルはないものとします。
数値データで同一値や数値外のものもないものとします。(つまりエラーチェックはしてませんよ)
Sub test()
Dim St1 As Worksheet, St2 As Worksheet
Dim sRng As Range, c As Range
Dim i As Long, n As Long
Set St1 = Worksheets("Sheet1")
Set St2 = Worksheets("Sheet2")
With St1
i = 1
For Each c In .Range(.Range("A1"), .Range("A1").End(xlDown))
Set sRng = .Range(c.Offset(0, 1), c.Offset(0, 1).End(xlToRight))
St2.Cells(i, "A").Value = c.Value
For n = 1 To sRng.Count
St2.Cells(i, "A").Offset(0, 1).Value = Application.WorksheetFunction.Small(sRng.Value, n)
i = i + 1
Next n
Set sRng = Nothing
Next c
End With
Set St1 = Nothing
Set St2 = Nothing
End Sub
最終行のバナナに入力された数字が4.3.7と三つありますが、3.7の二つを消して4だけで実行すると、「WorksheetFunctionクラスのSmallプロパティを取得できません」との実行時エラー1004が出てしまいました。複数以上を入力して利用したいと思います。ありがとうございました。
No.4
- 回答日時:
無理矢理辻褄を合わせた、すっきりしないコードですが、ご参考まで。
シート内の配置がわかりにくいですが、Sheet1はB2から、Sheet2はC3からと判断して記述しています。
Sub test()
Dim targetRange As Range, destrange As Range
Dim myCell As Range, srcRange As Range
Set destrange = Sheets("Sheet2").Range("c3")
With Sheets("Sheet1")
Set targetRange = .Range(.Range("b2"), .Range("b" & .Rows.Count).End(xlUp))
End With
For Each myCell In targetRange
Set srcRange = Range(myCell.Offset(0, 1), myCell.Offset(0, 1).End(xlToRight))
myCell.Copy destrange
srcRange.Copy
destrange.Offset(0, 1).PasteSpecial Paste:=xlPasteValues, Transpose:=True
destrange.Offset(0, 1).Resize(srcRange.Cells.Count, 1).Sort Key1:=destrange.Offset(0, 1), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, SortMethod:=xlPinYin
Set destrange = destrange.Offset(srcRange.Cells.Count, 0)
Next myCell
End Sub
Sheet1からSheet2へデータの貼付けを行うと、データ量が多くてもスムーズに処理が行われとても便利に使わせていただきました。ありがとうございました。あと、「りんご」「みかん」「バナナ」が貼り付いたところの書式が消えてしまうので、空白で入力するようにしました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) Excelにて、行の最後のセルの値をコピーして別sheetに張りつけるVBAコードをご教授願います 3 2022/11/20 14:35
- Visual Basic(VBA) VBA 検索と入力 Excel ブック ぶぶぶ シート ししし 列V 検索対象の列です 最終行は、お 6 2023/05/17 01:40
- Excel(エクセル) 関数EXACT(文字列,文字列)とexcelVBA 3 2022/04/14 15:07
- Excel(エクセル) エクセルの数式で教えてください。 1 2023/02/02 10:20
- Excel(エクセル) SUMIFSと日付変換 10 2023/04/16 15:38
- その他(プログラミング・Web制作) python OpenPyXLを使って出力結果をエクセルに書き込み 2 2022/06/04 19:46
- Visual Basic(VBA) Excel VBA 最終行を取得しVlookup関数をコピーする方法をコーディングで教えてください。 3 2023/05/11 13:14
- その他(Microsoft Office) 従業員増減対応で当番種類の増減対応な当番表 21 2022/07/19 07:30
- Excel(エクセル) VBAにてエクセルをpdf化する方法 1 2023/03/10 16:20
- Visual Basic(VBA) vbaのvlookup関数エラー原因を教えていただけないでしょうか。 3 2022/04/25 16:16
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
EXCELで2つの数値のうち大きい...
-
エクセル初心者です 関数の入れ...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
エクセルでオートフィルタのボ...
-
LOOKUP関数を使えばいいのでし...
-
エクセルで時刻(8:00~20:00)...
-
VBAで文字列を数値に変換したい
-
PowerPointで表の1つの列だけ...
-
エクセルの表から正の数、負の...
-
エクセル 文字数 多い順 並...
-
エクセルで、2種類のデータを...
-
エクセルで最初のスペースまで...
-
SUMIFとCOUNTIFを合わせたよう...
-
2つのエクセルのデータを同じよ...
-
Excelで半角の文字を含むセルを...
-
エクセルの項目軸を左寄せにしたい
-
エクセルのまとめてカッコをつ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルの表示形式を保ったま...
-
excelのマクロでrangeの選択が...
-
エクセル 1つのセル毎に入力...
-
Excel VBA For Each Next構文...
-
Excel2000 VBA ダブルクリック...
-
Excel VBAのComboboxのRemoveItem
-
Gメールの内容をスプレッドシ...
-
エクセルのIF関数がうまくいき...
-
EXCEL(エクセル)で0.001以下...
-
エクセルで重複するセルを削除...
-
エクセルの関数を連続コピー
-
EXCELで2つの数値のうち大きい...
-
Excelで隣のセルと同じ内容に列...
-
エクセルで二つの数字の小さい...
-
PowerPointで表の1つの列だけ...
-
エクセルで、2種類のデータを...
-
エクセルで最初のスペースまで...
-
エクセルでオートフィルタのボ...
-
エクセルのオートフィルタで最...
-
エクセルで時刻(8:00~20:00)...
おすすめ情報