Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


7975 / 13645 ツリー ←次へ | 前へ→

【35746】ブックレイアウトの入れ替え 06/3/11(土) 21:02 質問[未読]
【35747】Re:ブックレイアウトの入れ替え kobasan 06/3/11(土) 21:41 発言[未読]
【35750】Re:ブックレイアウトの入れ替え 06/3/12(日) 11:15 質問[未読]
【35751】Re:ブックレイアウトの入れ替え Kein 06/3/12(日) 13:31 回答[未読]
【35755】Re:ブックレイアウトの入れ替え Hirofumi 06/3/12(日) 14:16 回答[未読]

【35746】ブックレイアウトの入れ替え
質問   E-MAIL  - 06/3/11(土) 21:02 -

引用なし
パスワード
   こんばんは
 初めて投稿しました、よろしくお願いします。
いま、以下のことに直面しています。
ブックのレイアウトをある基準に従って、配列を入れ替えたいです。

例、
Mame1  Name2  No01 No02 No08 No05 No03 No09 No04

入れ替え後
Mame1  Name2  No01 No02 No03 No04 No05 No08 No09

Name1、Name2は変更しないですが、その以外の項目について、
No01〜No09の順で、配列の入れ替えを行いたいですが、
ご指導ください。

【35747】Re:ブックレイアウトの入れ替え
発言  kobasan  - 06/3/11(土) 21:41 -

引用なし
パスワード
   こんばんは

> 初めて投稿しました、よろしくお願いします。
>いま、以下のことに直面しています。
>ブックのレイアウトをある基準に従って、配列を入れ替えたいです。
>
>例、
>Mame1  Name2  No01 No02 No08 No05 No03 No09 No04
>
>入れ替え後
>Mame1  Name2  No01 No02 No03 No04 No05 No08 No09
>
>Name1、Name2は変更しないですが、その以外の項目について、
>No01〜No09の順で、配列の入れ替えを行いたいですが、
>ご指導ください。

メニューの標準機能でできます。

並べ替えたい
No01 No02 No08 No05 No03 No09 No04
とそのデータ範囲を指定して、

データ/並べ替え/オプションボタン/
方向で 列単位を指定 OKボタン
昇順を指定 OKボタン
できます。

こののマクロ記録でも、できます。

【35750】Re:ブックレイアウトの入れ替え
質問   E-MAIL  - 06/3/12(日) 11:15 -

引用なし
パスワード
   ▼kobasan さん
 回答をいただき、ありがとうございます。
ご紹介していただいた方法で試しましたので、有効でした。
もし、並べ替えの順番は「昇順」また「降順」ではなく、ある無規則順で、
並べ替える場合は、とても難しいと思いますが、Excelのブック内では、
不可能でしょうか?

無規則順
No01  No05  No09  No04  No03  No02  No08

【35751】Re:ブックレイアウトの入れ替え
回答  Kein  - 06/3/12(日) 13:31 -

引用なし
パスワード
   ワークシートメニューの「ツール」「オプション」「ユーザー定義リスト」タブを
選択し、左側のリストボックスから "新しいリスト" を選択、右側の "リストの項目"
リストボックスに、希望する順序で入力していきます。(リストの区切りは Enterキー
を押す)そして "追加"ボタンを押せばユーザー定義リストに追加されるので、
並べ替えセル範囲を選択後「データ」「並べ替え」で"オプション"ボタンを押下、
"並べ替え順序の指定"コンボボックスから、定義済みの項目を選択すれば出来ます。
もちろんこのとき、"方向"は"列"の方にチェックすること。

【35755】Re:ブックレイアウトの入れ替え
回答  Hirofumi  - 06/3/12(日) 14:16 -

引用なし
パスワード
   ▼星 さん:
>▼kobasan さん
> 回答をいただき、ありがとうございます。
>ご紹介していただいた方法で試しましたので、有効でした。
>もし、並べ替えの順番は「昇順」また「降順」ではなく、ある無規則順で、
>並べ替える場合は、とても難しいと思いますが、Excelのブック内では、
>不可能でしょうか?
>
>無規則順
>No01  No05  No09  No04  No03  No02  No08

「無規則順」と言うのが、如何言う意味か解りませんが?
希望する順番に並べ替えると言うならこんなのでも善いのかな?

Option Explicit
Option Compare Text

Public Sub ColumnsSort()

  Dim i As Long
  Dim j As Long
  Dim lngRows As Long
  Dim lngColumn As Long
  Dim rngList As Range
  Dim vntData As Variant
  Dim vntTitle As Variant
  Dim strProm As String
  
  '画面更新を停止
  Application.ScreenUpdating = False

  '並べたい列見出しの順番に列見出しを列挙
  vntTitle = Array("No01", "No05", "No09", "No04", "No03", "No02", "No08")
  
  'Listの左上隅を基準セル位置として設定(列見出しの最左が「No01」ならこの位置)
  Set rngList = ActiveSheet.Cells(1, "A")
  With rngList
    'データ行数を取得
    lngRows = .Offset(65536 - .Row).End(xlUp).Row - .Row + 1
    'データ列数を取得
    lngColumn = .Offset(, 256 - .Column).End(xlToLeft).Column - .Column + 1
    'データBookの列見出しを取得
    vntData = .Resize(, lngColumn).Value
  End With
  
  'Indexの配列を確保
  ReDim vntIndex(1 To lngColumn)
  'データの列見出しと並べ替えたい順番と比較
  For i = 0 To UBound(vntTitle)
    '整列順のIndexを作成
    For j = 1 To lngColumn
      If vntTitle(i) = vntData(1, j) Then
        vntIndex(j) = i
        Exit For
      End If
    Next j
  Next i
    
  With rngList
    '行を挿入
    .EntireRow.Insert
    '列整列用の順位Keyを出力
    .Offset(-1).Resize(, lngColumn).Value = vntIndex
    '順位Keyを元に列を整列
    .Offset(-1).Resize(lngRows + 1, lngColumn).Sort _
        Key1:=.Offset(-1), Order1:=xlAscending, _
        Header:=xlNo, OrderCustom:=1, MatchCase:=False, _
        Orientation:=xlLeftToRight, SortMethod:=xlStroke
    '整列Key行を削除
    .Offset(-1).EntireRow.Delete
  End With
  
  strProm = "処理が完了しました"
  
Wayout:
  
  '画面更新を再開
  Application.ScreenUpdating = True
  
  Set rngList = Nothing
  
  MsgBox strProm, vbInformation
  
End Sub

7975 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free