以前に似た質問をさせて頂きました時は、マクロ以外のご回答を頂きましたので、
今回は、「 マクロの回答 」 をお願いしたいと投稿いたしました。
何卒、ご教授くださいませ。
A列 の 下6桁 を除く数字は、 必ず、 1 ~ 10 です。
その 「 A列を優先キー 」 にて、「 複数の各レコードごと 」 を、 希望順 に入れ替えたいんです。
たとえば 「 4****** だけのレコード全部 ( 連続してます ) 」 を 「 エリア1 」 と 表現させて頂ます。
* 部分は、 必ず 6 桁 です。
左隅の数字 は 1 ~ 10 までだけ変動します。
このエリアの数は、 2 ~ 3 まで変動します。
------------------------------------------------
下記例は、エリアの数が 3つ で、
左隅の数字 4、 2、 10 の場合です。
実行前 ( エリア順が 4、2、10 です )
A列
4******
・
・
4******
2******
・
・
2******
10******
・
10******
↓↓↓
実行後1 ( エリア順を 10、4、2 にさせたい。 実際には、エリア順は全部で5通りになります。 )
A列
10******
・
10******
4******
・
・
4******
2******
・
・
2******
No.6ベストアンサー
- 回答日時:
こちらが想定してるのと違ってるようですね。
あー。読み直して理解しいました。
A列は 4だけが入ってるのではなくて、4******が入っているのですね。
B列以降はまた別途データが入っている、と。
修正しました。
Sub a()
Dim sort_key As String
Dim sDataArray As Variant
Dim i As Long
Dim j As Long
sort_key = InputBox("ソートキーを入力してください" & vbCrLf & "1,2,3みたいな感じで入力してください")
'/*
'/* 入力内容分割
'/*
sDataArray = Split(sort_key, ",", -1, vbTextCompare)
'/*
'/* 256列に暫定ソートキーを設定
'/*
For i = 0 To UBound(sDataArray)
j = 1
Do Until Cells(j, 1) = ""
'桁数の考慮を追加しました。
Select Case Len(Cells(j, 1))
Case 7
'7桁だったら先頭1桁と比較
If Val(Mid(Cells(j, 1), 1, 1)) = Val(sDataArray(i)) Then
Cells(j, 256) = i
End If
Case 8
'8桁だったら先頭2桁と比較
If Val(Mid(Cells(j, 1), 1, 2)) = Val(sDataArray(i)) Then
Cells(j, 256) = i
End If
Case Else
MsgBox ("桁数がへんっすー")
End Select
j = j + 1
Loop
Next
'/*
'/* 暫定ソートキーでソート
'/*
Cells.Sort Key1:=Range("IV1"), Order1:=xlAscending, Header:=xlGuess
'/*
'/* 暫定ソートキーを削除
'/*
Columns("IV:IV").Select
Selection.Delete Shift:=xlToLeft
Range("A1").Activate
End Sub
No.5
- 回答日時:
A列
4******
4******
4******
4******
4******
4******
2******
2******
2******
2******
2******
10******
10******
10******
上記のような場合、10,4,2の順にしたいばあいは
10,4,2
と入力してください
5パターンに制限されることなく、A列の並べたい順に入力してください。
A列が、3、4の二つしかなく4******,3******の順にしたいときは
4,3
と入力してください
この回答への補足
度々、大変、恐れいります。
>上記のような場合、10,4,2の順にしたいばあいは
10,4,2
と入力してください
も試みましたが、同様に、動作する(エラーにはならない)のですが、 全く動かないんですが?
当方のどこかに問題があると思いますが、それが解りません。
1、標準モジュール に貼り付けましたが、よろしいでしょうか?
2、どこかを編集する必要がおありでしょうか?
3、それと、自身なりに IV列を 確認しましたが、空白のままになっている IV列を 削除しているようなんですが?
4、当方は、Excel 2002 です。
----------------
恐れ入ります、再確認ですが、
ファイル名は、*******.CSV
A列
4062501
4062502
4062504
4062505
2062502
2062503
2062505
10062510
10062511
10062512
上記のような場合、10,4,2の順にしたい場合は、
10,4,2
と入力すればよろしいわけでしょうか?
試みましたが、同様に、動作する(エラーにはならない)のですが、 全く動かないんですが?
以上 よろしくお願い致します。
No.4
- 回答日時:
こんな感じでしょうか?
IV列を暫定で使用してますので、IV列を既に使用済みでしたら別列にしてください。
Sub a()
Dim sort_key As String
Dim sDataArray As Variant
Dim i As Long
Dim j As Long
sort_key = InputBox("ソートキーを入力してください" & vbCrLf & "1,2,3みたいな感じで入力してください")
'/*
'/* 入力内容分割
'/*
sDataArray = Split(sort_key, ",", -1, vbTextCompare)
'/*
'/* 256列に暫定ソートキーを設定
'/*
For i = 0 To UBound(sDataArray)
j = 1
Do Until Cells(j, 1) = ""
If Val(Cells(j, 1)) = Val(sDataArray(i)) Then
Cells(j, 256) = i
End If
j = j + 1
Loop
Next
'/*
'/* 暫定ソートキーでソート
'/*
Cells.Sort Key1:=Range("IV1"), Order1:=xlAscending, Header:=xlGuess
'/*
'/* 暫定ソートキーを削除
'/*
Columns("IV:IV").Select
Selection.Delete Shift:=xlToLeft
Range("A1").Activate
End Sub
この回答への補足
誠に申し訳ございません、動作する(エラーにはならない)のですが、 全く動かないんですが?
私の質問の例でしたら、ソートキーを
3,1,2
と 入力すればよろしいわけでしょうか?
それとも 312 でしょうか?
よろしくお願い致します。
No.3
- 回答日時:
#2です。
関数による回答で、お呼びじゃないのは判りますが、結果はこういうので良いでしょうか。これをVBAコードでッ実現するのは、たやすいのですが。
結果は下記でよいのか、補足していただければ幸いです。
データ
A列 B列
B列は=RANDBETWEEN(1,100)で出したもの
8******51
5******14
5******61
7******77
10******65
9******99
6******88
4******5
6******98
8******84
8******83
7******14
9******61
5******17
4******50
6******46
4******20
10******2
B列でソート(順をランダム化するため
結果
C列は=IF(MID(A1,LEN(A1)-6,1)="0",MID(A1,LEN(A1)-7,2),MID(A1,LEN(A1)-6,1))*1 で出したもの。
A列 B列 C列
4******604
5******745
6******306
7******527
8******358
4******564
5******195
6******146
4******194
5******1005
6******566
7******397
8******878
9******819
10******4710
8******938
9******1009
10******4110
C列でソート。
10******7110
10******2610
9******149
9******149
8******708
8******468
8******888
7******767
7******487
6******486
6******936
6******576
5******85
5******545
5******865
4******414
4******74
4******134
この回答への補足
すみません、重要な質問内容のミスです。
>たとえば 「 4****** だけのレコード全部 ( 連続してます ) 」 を 「 エリア1 」 と 表現させて頂ます。
↓↓↓ 訂正です。
下記例の「 4****** 」は「 4****** だけのレコード全部 ( 4だけが全く同じのデータが続いてます ) 」 を 「 エリア1 」 と 表現させて頂ます。
必ず、左端の数字は同じに続いており、連続ではありません。
-------------------------
実行前 ( エリア順が 4、2、10 です )
A列
4******
4******
4******
4******
4******
4******
2******
2******
2******
2******
2******
10******
10******
10******
↓↓↓
実行後1 ( エリア順を 10、4、2 にさせたい。 実際には、エリア順は全部で5通りになります。 )
A列
10******
10******
10******
4******
4******
4******
4******
4******
4******
2******
2******
2******
2******
2******
--------------------------
No.2
- 回答日時:
> 複数の各レコードごと 」 を、希望順に並び替えるマクロは
これは書かなくても良い文章です。
また「レコード」は、エクセルせは「行」で表されるので、仰々しい。これをテキスト形式やMDB形式のファイルに変換すれば、レコードという考えが正面に出てくる。「複数の」もソートにおいては当たり前のケースで、書けば却って何か?と思ってしまう。
コンピュターのソートは、基本的に、昇順、降順とソートキー(ソート列、どの列でソートするのか)しか指定できません。
それ以上は、自分がソートしてほしいように、修正キーを各レコード(各行)に(多分別列に)「作る」必要があります。
作ってしまえば、VBAでもコード2行で済んでしまいます。
プログラムなどでは、レコードの後尾などに、フィールドとして、修正キー項目を付け加えたりすることも多い。
かっての、コンピュター作業は、ソート+処理が基本で、これが死命を握ってました。
ーー
キーが4(列)つ以上の場合なら、エクセルの質問に値しますでしょうが、本件はこれには関係ないらしい?
ーーー
補足要求
(1)本件は、大筋右から7桁目の1桁でソートすればよいが、10の場合は右から7桁目から2桁採らないといけないようですが、これが異例となります。右から7桁目が0の場合だけ2桁採ればよいのでしょうか?
ーーー
(2)希望通り、ソート後に、右から7桁目が例えば2のものだけを、別シートに分離
したいとかの要求はあるのですか。
(3)>このエリアの数は、 2 ~ 3 まで変動します。
この意味は?
データの内容の実情であって、プログラムに影響しないのでは?。
プログラムのことが判らないのだから、やむをえないのだが、質問文に書かなくても良いことが描いてある感じがする。
もっと質問点を絞る訓練が必要。そうしないと、全てVBAコード作ってください式になってしまう。
ーー
要望
関連前問が有るようですが、その番号を書いておけば、問題の意味の
理解に役立つので、書いておいてはどうでしょう。
この回答への補足
すみません、重要な質問内容のミスです。
>たとえば 「 4****** だけのレコード全部 ( 連続してます ) 」 を 「 エリア1 」 と 表現させて頂ます。
↓↓↓ 訂正です。
下記例の「 4****** 」は「 4****** だけのレコード全部 ( 4だけが全く同じのデータが続いてます ) 」 を 「 エリア1 」 と 表現させて頂ます。
-------------------
>(1)本件は、大筋右から7桁目の1桁でソートすればよいが、10の場合は右から7桁目から2桁採らないといけないようですが、これが異例となります。右から7桁目が0の場合だけ2桁採ればよいのでしょうか?
はい、おっしゃられる通りでございます。
>(2)希望通り、ソート後に、右から7桁目が例えば2のものだけを、別シートに分離
したいとかの要求はあるのですか。
「 別シートに分離したい 」は一切ございません。
ただ、後に、このシート上で、A列も含めて、マクロにて置換え、ソート等はいたしますので、各セルのデータ内容は変更されては困ります。
(都合上、もし列が追加された場合は、その列を削除しますので追加は結構です。)
>(3)>このエリアの数は、 2 ~ 3 まで変動します。
この意味は?
今回の質問は、エリアの数は、 3 ですが、 2 の場合の時もあるということです。
すみません余分(2の場合は、上下入れ替えの1通りだけです)でした、今回は 3 だけ(下記例だけ) で結構です。
また、「全てVBAコード作ってください式」ではなくて、もちろん関数等と混合しても結構です。
>要望
http://oshiete1.goo.ne.jp/qa2631898.html
未熟な私の判断(使用してみた結果)ですと、
このご回答の場合、A列の数字(1~10)を軸にしていると思いましたので、119通り(エリアの数が3の場合)になると思った次第でございます。
今回の質問で、A列のエリア順(1・2・3)を軸にし、5通り(エリアの数が3の場合)にしたいと思ったからです。
No.1
- 回答日時:
エクセルで処理すると前提で補足お願いします。
1.ソートしたいものは、全てA列に収まっているのでしょうか?
あるいは、A列には1~10のみでB~G(6桁)にのこりの可変”*”が入っているのでしょうか?
2.ソートの順番指定は5通りとのことですが、どのように指定したいのでしょうか?
この回答への補足
即答、誠に有難うございます。
大変恐れいります。
>1.ソートしたいものは、全てA列に収まっているのでしょうか?
A列だけを 「 最優先されるキー 」 にてレコードごとをソートしたいのです。
>あるいは、A列には1~10のみでB~G(6桁)にのこりの可変”*”が入っているのでしょうか?
質問画面の例の通りで、B列以降は、他のデータなので、無視されて結構です(但し、各セルのデータ内容が変更されては困ります)。
B列以降は、A列だけを 「 最優先されるキー 」 にてソートされるだけで結構でございます。
>2.ソートの順番指定は5通りとのことですが、どのように指定したいのでしょうか?
例えば、
今回の質問の「1通り」は、エリア順 「 1・2・3 」 → 「 3・1・2 」にしました。
他は、 エリア順 「 1・2・3 」 → 「 3・2・1 」にします。
他は、 エリア順 「 1・2・3 」 → 「 2・3・1 」にします。
他は、 エリア順 「 1・2・3 」 → 「 2・1・3 」にします。
他は、 エリア順 「 1・2・3 」 → 「 1・3・2 」にします。
他は、 エリア順 「 1・2・3 」 → 「 1・2・3 」にします。× 同じなので不必要。
以上で、合計5通りでございます。
よろしくお願い致します。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) EXCEL 関数を教えてください。(A列の同じ値が複数ある場合vlookupで出来ますか) 4 2022/12/07 20:54
- Visual Basic(VBA) 複数ファイルのデータの統合について 12 2022/05/14 12:03
- Excel(エクセル) 【困っています】VBA 追加処理の記述を教えてください。 1 2022/08/25 22:54
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- その他(プログラミング・Web制作) テキストエディタで複数行にわたる文字列の行頭に番号を振る方法 4 2023/03/11 12:57
- Visual Basic(VBA) 【前回の続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/16 16:44
- Visual Basic(VBA) VBA B列にある前から10文字のみ表示 3 2023/08/07 11:24
- Excel(エクセル) Excel_マクロ_複数のシートのVLOOKUPで表示された#N/A以外に色付けをしたいです 1 2023/02/16 22:37
- Excel(エクセル) エクセル関数の変わった使い方 3 2022/05/13 17:12
- Excel(エクセル) capeofdragonと申します Excel2016を使っておりまして 半角又は全角の任意文字列が 2 2022/10/31 13:51
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで離れた列を選択して...
-
えABのある列って
-
LEFT関数とIF関数の組み合わせ...
-
CSVファイルの「0落ち」にVBA
-
土日の列幅の自動変更を教えて...
-
エクセル 重複したデータを別...
-
VBAで別ブックの列を検索し、該...
-
最終行に合計(最終行が列によ...
-
エクセル 選択するマクロ
-
オートフィルターの複数抽出と...
-
VBAで結合セルを転記する法を教...
-
データシートビューのタイトル...
-
百マス計算の引き算作り方を教...
-
Excel2007で行の列をひとくくり...
-
アクセス 取り込み時に、桁数(...
-
エクセルマクロでオートフィル...
-
csvデータの列の入れ替えができ...
-
エクセルマクロ、アウトライン...
-
Excelの行数、列数を増やしたい...
-
エクセルでB列とD列を比較させ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで離れた列を選択して...
-
VLOOKUPの列番号の最大は?
-
「段」と「行」の違いがよくわ...
-
LEFT関数とIF関数の組み合わせ...
-
VBA 指定した列にある日時デー...
-
CSVファイルの「0落ち」にVBA
-
エクセルで複数列の検索をマク...
-
Excelの行数、列数を増やしたい...
-
エクセルマクロの組み方
-
エクセルマクロPrivate Subを複...
-
リストからデータを紐付けしたい
-
エクセルのソートで、数字より...
-
エクセルで住所を県と市・郡と...
-
VBAで別ブックの列を検索し、該...
-
VBA
-
Excel文字列一括変換
-
エクセル 重複 隣の列 一番...
-
列方向、行方向の定義
-
Alt+Shift+↑を一括で行うには、...
-
VBAで結合セルを転記する法を教...
おすすめ情報