Excel (VBA)

Excel VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Ultimate : Excel 2016)
データの並び替えについて
投稿日時: 19/11/12 14:24:09
投稿者: アパマン

いつもお世話になっております。
アパマンと申します。
 
以下@の表(ラーメン派か、カレー派かを調査した表)
のデータをAのデータに張り替えるマクロを組もうと
しているのですが、私の力量では手も足も出ず、どう
しようもないので、是非とも皆さまにご助言いただき
たく存じます。
 
@の表の×マークはカレー派もしくはラーメン派では
ないことを示しており、ラーメンかカレーどちらも嫌い
という生徒のデータは含まれていません。
 
データが変化しても問題なくAの表にできるものを考えて
おり、例えば、A小学校の子が下記の表では5人ですが、
6人になった場合などであっても問題なくAの形式の
表にできるものを考えています。
 
@
学校名    組    氏名    ラーメン派    カレー派
A小学校    1    佐藤             ×
A小学校    1    西島    ×    
A小学校    2    真守    ×        ×
A小学校    2    大森             ×
A小学校    3    竹内    ×    
B小学校    1    飯岡    ×        ×
B小学校    1    金森             ×
B小学校    2    福浦    ×     
B小学校    3    福島    ×        ×
C小学校    1    鈴木             ×
C小学校    2    森嶋    ×    
C小学校    3    岡田             ×
C小学校    3    紀一             ×
 
A
学校名    組    ラーメン派    カレー派
A小学校    1    西島       佐藤
A小学校    1    真守    
A小学校    2    真守       真守
A小学校    2             大森
A小学校    3    竹内    
B小学校    1    飯岡       飯岡
B小学校    1             金森
B小学校    2    福浦    
B小学校    3    福島       福島
C小学校    1             鈴木 
C小学校    2    森嶋    
C小学校    3             岡田
C小学校    3             紀一
 
 
 
本当に困っております。
御多忙中恐縮ですが、何卒よろしくお願い申し上げます。

回答
投稿日時: 19/11/12 15:07:24
投稿者: WinArrow
投稿者のウェブサイトに移動

最初に
コードの作成依頼は禁止されています。
↓をよく読んでください。
https://www.moug.net/faq/kiyaku.html
 
次に、倫理がわかりません。
説明と、例示の表が食い違っていませんか?
 
A小学校の1組には、2人しかいませんか?20人いたらどうするのでしょうか?
なぜ、カレーとラーメンだけなんですか?
@の表の持ち方を再検討したほうがよいと思います。
また、Aの表も検索条件を好みで検索できるようにしたらいかがでしょうか?

回答
投稿日時: 19/11/13 19:00:02
投稿者: simple

揚げ足とりで恐縮ですが。
> @の表の×マークはカレー派もしくはラーメン派では
> ないことを示しており、ラーメンかカレーどちらも嫌い
> という生徒のデータは含まれていません。
とのことですが、
 
冒頭の西島は、ラーメン派に×がついているけど、
Aでは、ラーメン派にされている。
Aはラーメン反対派という意味の見出しなんですか?
 
それに、
どちらにも×がついている人が複数いますが、
どうなっていますか?
 
まあ、所詮は架空の例なので大人げないと言えばそれまでです。
 
それでも、質問の眼目というものがあるでしょう?
A小学校1組のように、縦方向にできるだけ圧縮したい
というのが狙い、キモなんですか?
 
テキトーな例を出さずに、
質問のポイントは何かをきちんと書いて下さいよ。
----------------------------------------
こんな設定で、コード例を示したいと思う。
設例そのままではないので、内容理解の上、必要な修正をそちらでやってください。
 

<<入力>>                                               <<出力>>
      A列       B   C     D     E      F     G   | H         I   J       K     L
1行目 学校名    組  氏名  ラーメン派 カレー派 ハンバーグ派 | 学校名    組  ラーメン派  カレー派 ハンバーグ派
2     A小学校  1   佐藤  ○                     | A小学校  1   佐藤    西島  
3     A小学校  1   西島         ○              |               山田          
4     A小学校  1   山田  ○                     | A小学校  2   真守    真守  
5     A小学校  2   真守  ○     ○              |               大森          
6     A小学校  2   大森  ○                     | A小学校  3   竹内    武田  谷山
7     A小学校  3   竹内  ○                     |               鈴木    齋藤  谷本
8     A小学校  3   鈴木  ○                     |                             羽生
9     A小学校  3   武田         ○              |
10    A小学校  3   齋藤         ○              |
11    A小学校  3   谷山               ○        |
12    A小学校  3   谷本               ○        |
13    A小学校  3   羽生               ○        |

 
参考コード例は以下。
 
Sub test()
    Dim p(1 To 3) As Long
    Dim s       As String
    Dim former  As String
    Dim maxp    As Long
    Dim k As Long, j As Long
    
    p(1) = 1: p(2) = 1: p(3) = 1
    
    For k = 2 To Cells(Rows.Count, "A").End(xlUp).Row
        s = Cells(k, 1).Value & Cells(k, 2).Value   '学校名 & 組
        If s <> former Then                         '新しい組み合わせなら
            maxp = WorksheetFunction.Max(p)
            p(1) = maxp: p(2) = maxp: p(3) = maxp
            Cells(maxp + 1, 8).Value = Cells(k, 1).Value
            Cells(maxp + 1, 9).Value = Cells(k, 2).Value
            former = s
        End If
        
        For j = 1 To 3
            If Cells(k, 3 + j).Value = "○" Then
                p(j) = p(j) + 1
                Cells(p(j), 9 + j).Value = Cells(k, 3).Value
            End If
        Next
    Next
End Sub

トピックに返信