人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

Excelで、

[佐藤] | [A1] | [×]
[佐藤] | [B2] | [×]
[佐藤] | [C3] | [×]
[佐藤] | [D4] | [×]
[山田] | [E5] | [○]
[山田] | [F6] | [×]
[田中] | [G7] | [○]
[田中] | [H8] | [○]
[田中] | [I9] | [○]
[田中] | [J0] | [○]
[田中] | [K1] | [×]
[木村] | [L2] | [×]
[木村] | [M3] | [×]
[鈴木] | [N4] | [○]
[鈴木] | [O5] | [×]
[鈴木] | [P6] | [×]

のようになっているファイル(実際のデータ数10000件以上)で、
条件に1件でも該当する名前を上部に、

[山田] | [E5] | [○]
[山田] | [F6] | [×]
[田中] | [G7] | [○]
[田中] | [H8] | [○]
[田中] | [I9] | [○]
[田中] | [J0] | [○]
[田中] | [K1] | [×]
[鈴木] | [N4] | [○]
[鈴木] | [O5] | [×]
[鈴木] | [P6] | [×]
[佐藤] | [A1] | [×]
[佐藤] | [B2] | [×]
[佐藤] | [C3] | [×]
[佐藤] | [D4] | [×]
[木村] | [L2] | [×]
[木村] | [M3] | [×]

のように並べかえたいのですが、
良いやり方がありましたらご教授ください。よろしくお願いします。

●質問者: Solais
●カテゴリ:コンピュータ
✍キーワード:A1 b2 C3 D4 Excel
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

1 ● maeda
●30ポイント

VBAでやればできますが。名前のセルの【】の中をmid関数で

文字を抽出します。 文字がそろっているものの中で、右端の【】の中身をmid 関数で読み込みます。 一つでも○のあるものを選択して、並べて行けばいいですよね。

VBA とか mid 関数はお分かりですか。

◎質問者からの返答

回答ありがとうございます。

すみません、VBA・mid 関数・マクロ等まったくわかりません。

よろしければ書式も教えていただければありがたいです。


2 ● Mook
●400ポイント

マクロを使った例です。


処理シートのシートタブを右クリック、コードの表示を選択し、

表示されたウィンドウに下記のコードをコピーしてから、

EXCEL で Alt+F8を押して、MySort を実行してみてください。

Sub MySort()
'// アクティブシートを処理
 Dim srcWS As Worksheet
 Set srcWS = ActiveSheet
 
'// 作業シートを作成
 Dim dstWS As Worksheet
 srcWS.Copy before:=srcWS
 Set dstWS = Worksheets(srcWS.Index - 1)
 Dim lastRow As Long
 lastRow = Range("A" & Rows.Count).End(xlUp).Row
 
'// 名前順でソート
 dstWS.Columns("A:C").Sort Key1:=dstWS.Range("A1"), Order1:=xlDescending, Header:=xlGuess
 
'// 同じ名前に一つでも丸があれば、全てに1を設定
 Dim ar
 ar = Range("A1:D" & lastRow + 1)
 Dim nn As String
 Dim flg As Boolean
 Dim ns As Long
 Dim i As Long
 ns = 1
 For i = 1 To lastRow + 1
 If nn <> ar(i, 1) Then
 If flg = True Then
 For j = ns To i - 1
 ar(j, 4) = 1
 Next
 Else
 For j = ns To i - 1
 ar(j, 4) = 0
 Next
 End If
 flg = False
 nn = ar(i, 1)
 ns = i
 End If
 If ar(i, 3) = "○" Then
 flg = True
 End If
 Next
 
'// 作業シートで作業列でソート
 dstWS.Range("A1:D" & lastRow) = ar
 dstWS.Columns("A:D").Sort _
 Key1:=dstWS.Range("D1"), Order1:=xlDescending, _
 Key2:=dstWS.Range("A1"), Order2:=xlAscending, _
 Header:=xlGuess

'// 作業列を削除
 dstWS.Columns("D").Delete
End Sub

3 ● phantazy
●400ポイント

・左から、列A,B,Cだとします。

・データ数が10000だとします。

(1).セルD1に以下のような式を入力してください。

=A1&C1

(2).セルE1に以下のような式を入力してください。

=IF(COUNTIF(D$1:D$10000,A1&"○")=0,0,1)

(3).D1とE1をすべてのデータ行にコピーしてください。

(4).列E(降順),列Aの優先順位で並べ替えてください。

※データの件数に応じて(2)の式を変えてください。


4 ● zuguimo
●400ポイント ベストアンサー

D列、E列が自由に使えるという前提でC列には○または×だけで

余分なスペースが入っていない条件で答えます。

D列 =IF(C1="○",1,0)

E列 =SUMIF(A:A,A2,D:D)

これを1行目に入れて下までコピーします。

あとはA列からE列までE列を基準に降順に並べ替えをすれば

とりあえず可能です。

(D列には○なら1、×なら0を入力し、E列でA列の名前の○の数を

数えています。)

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ