• 締切済み

ドロップダウンリスト項目と空欄の自動入れ替え

お世話になります。 使用OSはWindows11、エクセルは2019です。 現在、ドロップダウンリストにて、 成功の場合は◯、失敗の場合は✕を作って利用しています。 まだ成功か失敗か判らない場合は空欄のままです。 行が増えていくと、◯や✕が入力されているものと空欄が 飛び飛びになってしまうので、 ◯や✕が入力されたら、自動的に、行を詰めたいのです。 例えば、1~10までの行に項目があるとして、 1行目と2行目に、◯または✕が入力されてるとします。 次に、4行目に◯または✕を入力した場合、 この4行目を空欄の3行目と入れ替えたいのです。 つまり、これまで4行目だった項目が、 ◯または✕を入力したため、3行目に移り、 まだ空欄である3行目が4行目に移るという感じです。 またその次に7行目に◯または✕を入力した場合は、 空欄の4行目と7行目を入れ替える。そういう感じにしたいのです。 そういう動作を自動的にやれればと思うのですが、 そういう設定は可能でしょうか。 もし無理ならば、似たような感じで、 入力された行をまとめたいのですが、どうすればよいでしょうか。

みんなの回答

  • oboroxx
  • ベストアンサー率40% (317/792)
回答No.3

該当の表をテーブル化して、ソートすればよろしいのではないでしょうか。 以下はテーブル化するやり方 https://www.tku.ac.jp/iss/guide/classroom/tipspc/excel-table.html

24jack
質問者

お礼

ご回答をありがとうございます。 Excel初心者の私にはハードルが高い気がしますが、試してみようと思いますけど、 これは、その都度テーブル化していかないといけない感じでしょうかね?

すると、全ての回答が全文表示されます。
  • SI299792
  • ベストアンサー率47% (793/1659)
回答No.2

VBA でやるしかないですね。 画像の様な表で。 A列:番号 B列:項目 C列:プルダウン(○×) とします。 ※D列を作業列に使っています。D列は使わないでください。 Option Explicit ' Private Sub Worksheet_Change(ByVal Target As Range)   Dim REnd As Long '   If Intersect(Target, [C2:C11]) Is Nothing Then     End   End If '   Application.EnableEvents = False   REnd = Cells(Rows.Count, "A").End(xlUp).Row   Range("A2:D" & REnd).Sort Key1:=[D2], Order1:=xlAscending   Application.EnableEvents = True End Sub

24jack
質問者

お礼

ご回答をありがとうございます。 こちらもExcel初心者の私にはハードルが高い気がしますが、試してみようと思います。 ちょっとここのところ忙しくて、なるべく時間を作ってやってみますので、 結果は少々お待ちください。

すると、全ての回答が全文表示されます。
  • MT765
  • ベストアンサー率57% (2091/3632)
回答No.1

VBAで対象の行をCutとInsertすればよいかなと思います。 VBAのコード Private Sub Worksheet_Change(ByVal Target As Range) ' ドロップダウンリストのある列を指定 (例: A列) Const targetColumn As String = "A" ' 対象範囲を指定 (例: A1セルからA10セル) Dim targetRange As Range Set targetRange = Range(targetColumn & "1:" & targetColumn & "10") ' 変更があったセルが対象範囲内かどうかをチェック If Not Intersect(Target, targetRange) Is Nothing Then ' ◯または✕が入力されたら If Target.Value = "◯" Or Target.Value = "✕" Then ' 空白行を検索 Dim emptyRow As Range Set emptyRow = targetRange.Find("", LookIn:=xlValues, LookAt:=xlWhole) ' 空白行があれば、行を入れ替え If Not emptyRow Is Nothing Then Target.EntireRow.Cut emptyRow.EntireRow.Insert Shift:=xlDown End If End If End If End Sub このコードは下記のような流れになっています。 コードの説明 ・Worksheet_Change イベント: セルの値が変更されたときに実行されるイベントです。 ・targetColumn: ドロップダウンリストのある列を指定します。 ・targetRange: 対象となるセル範囲を指定します。 ・Find メソッド: 空白セルを検索します。 ・Cut メソッドと Insert メソッド: 行の切り取りと挿入を行います。 ※動作確認はしていないので間違っている可能性があります

24jack
質問者

お礼

ご回答をありがとうございます。 Excel初心者の私にはハードルが高い気がしますが、試してみようと思います。 ちょっとここのところ忙しくて、なるべく時間を作ってやってみますので、 結果は少々お待ちください。

すると、全ての回答が全文表示されます。

関連するQ&A