行列入れ替えの並び替えを簡単に出来る方法
エクセルで写真の左側のシートを右側のシートの様に並び替えをしたいのですが、簡単に計算式を入れてやる方法はありますか?
変換前のシートは他にもありまして、行列の長さはどれも長さがバラバラになっております。
行は~◯kgが複数あり、列は商品コードが100個以上あるのもあります。
なので、行列の長さがバラバラでも一つのマクロで動作出来るものを作成したいと考えています。
計算式を一個づつ入れて作ってましたがとんでもなく不格好になり。。。。
すみません、どなたかご指導お願いできませんか?
Sub henkan()
'貼付けシートの作成
'シート名は変換で作成
Sheets.Add after:=ActiveSheet
ActiveSheet.Name = "変換"
'タイトル名作成
Range("A1").Select
ActiveCell.FormulaR1C1 = "商品コード"
Range("B1").Select
ActiveCell.FormulaR1C1 = "容量"
Range("C1").Select
ActiveCell.FormulaR1C1 = "量"
'容量作成
Dim g As Integer
Dim h As Integer
r = 0
Z = 0
y = 0
Worksheets("量").Activate
Range(Cells(3, 3), Cells(3, Columns.Count).End(xlToLeft)).Select
Z = Selection.Count
Worksheets("量").Activate
Range("B4", Range("B4").End(xlDown)).Select
y = Selection.Rows.Count
For g = 4 To y + 3
Worksheets("量").Activate
Range(Cells(3, 3), Cells(3, Columns.Count).End(xlToLeft)).Select
Selection.Copy
h = g - 2 + r 'ここでhの値を計算しています
Sheets("変換").Cells(h, 2).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
r = r + Z - 1
Next g
'量作成
Dim j As Integer
Dim k As Integer
r = 0
For j = 4 To y + 3
Sheets("量").Select
Sheets("量").Range(Cells(j, 3), Cells(j, Columns.Count).End(xlToLeft)).Copy
k = j - 2 + r 'ここでkの値を計算しています
Sheets("変換").Cells(k, 3).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
r = r + Z - 1
Next j
'商品コード作成
Dim l As Integer
Dim m As Integer
r = 0
For l = 4 To y + 3
Worksheets("量").Activate
Cells(l, 2).Select
Selection.Copy
m = l - 2 + r 'ここでmの値を計算しています
Sheets("変換").Cells(m, 1).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
r = r + Z - 1
Next l
'罫線作成
Sheets("変換").Select
With ActiveSheet.UsedRange.Borders
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
'容量コードの空白埋め
Sheets("変換").Select
Range("A1").Select
Dim o As String
Dim p As Range
o = "A2:B" & Range("C" & Format(Rows.Count)).End(xlUp).Row
For Each p In Range(o)
If p.Value = "" Then p.Value = p.Offset(-1, 0).Value
Next
Dim rng As Range
Worksheets("変換").Activate
Worksheets("変換").UsedRange.Select
For Each rng In Selection
If rng.Value = "" Then
rng.Value = "0"
End If
Next rng
End Sub
補足
Wendy02様、こんにちは。 いつもお世話になっています。 ご説明をどうもありがとうございます。 >具体的な内容は分かりませんが、それ自体が、マクロが必要かどうかもわかりません。 会計フォームを作ろうとしています。フォームの一部にユーザが入力したデータを使って残りの部分を計算するプロシージャを書いています。 ユーザフォームやコンボボックスも参照するので、VBAじゃないと難しいと思います。 >また、2バイト変数は、よほどの入門者以外は、ふつうは書きません。 入門者です。いい勉強になりました。ありがとうございました。 また、Wendy02様が書いてくださったプロシージャに分からない部分がありますので、よろしければ教えていただけないでしょうか? >Dim Num(2) As Double どうしてNumに2が入るんですか? >For Each c In Range("O18:O20") cというのは何ですか?定義しなくてもいいですか? それと、説明不足で申し訳ありませんが、O18, O19, O20のセルはそれぞれのコンボボックスと結ばれています。選択されたコンボボックスの値によって、計算式が違います。つまり、Range("N37")に、3つのコンボボックスの値を参照した3つの式の結果を入れたいですが、コンボボックスの値が変わるたびに式も変わるので、それをどう考慮すればいいかが分かりません。 色々と聞いてしまって申し訳ありませんが、どうぞよろしくお願いします。