アプリ版:「スタンプのみでお礼する」機能のリリースについて

エクセルでA列下に各商品名項目が下にずらっと並んでいて、またエクセル1行目の右横に各お客さん名項目がずらっと並んでいて、たとえば ある患者さんが(例 ○○さん:D1)がある商品
(例 △△:A15)を 5個、 他のある商品(例 ◇◇:A20)を12個を購入したため それぞれのセルを探して(D15)に5、(D20)に12と2種類の商品の数量を入れ込んでおいた状態で、D2セルをダブルクリックすることで見やすくするために商品項目名のA列と今回の患者さんのD列を残し、他の列をみえなくし、かつ上からDさんの購入した各商品の数量順に見やすく上から下に並べ替えられることできませんでしょうか。
この前はD1セルをダブルクリックすることで商品項目とD列だけ残すことは教わりましたが、今度は購入した商品が配置上 上と下ではなれてしまっている場合 見ずらいのでソートしたらいいのではということを考えて 教えを賜りたく質問いたしました。(VBAで)

A 回答 (3件)

こんにちは。



前回、トグルと書いたのは、例えば、他の列が隠れた後に、同じダブルクリックをすると、元に戻るような仕組みを、今度はソートにも同じように戻るように、取り付けなくてはならないということです。つまり、2つの仕様を組み合わせると、それが混じり合わないようにしなくてはならないことです。前回のレベルよりも格段と難しくなります。

このコードは、前回のコードを上書きしてもらうことになります。

●仕様と仕組み
Excelには、ソートすることは可能でも、戻すのはできませんから、どこかに順序を記録する必要があります。
データ群に隣接する右端の1行目に、セル番地をマクロに書き込みます。(図を参照)

前回と同じで、氏名をダブルクリックすれば、その列だけになり、2行目をダブルクリツクすれば、ソートされ、もう一度同じ場所をダブルクリックすれば、元に戻ります。
No.2 さんの2行目に戻るの場合、氏名以外の列をダブルクリックする方式に変えることは可能ですが、それは、質問者さんのリクエストではありませんので、割愛します。とにちかく、作ってしばらくはサポートは可能ですが、ややこしいです。

'//シートモジュール
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 Dim CRng As Range
 Dim Rng As Range
 Dim lastCell As Range
 Dim ReSort As Range
 Dim t As Long
 t = Cells(Rows.Count, 1).End(xlUp).Row
 Cancel = True
 If Target.Value Like "[1!]" Then Exit Sub
 '*******************
 'ソートフラグ(必ず、データ範囲の横、行目に入れてください)
 Set ReSort = Range("AF1")
 '*******************
 Set CRng = Range("B1", Cells(1, Columns.Count).End(xlToLeft))
 Set Rng = Range("A1").CurrentRegion

 '復帰用
 With ReSort.Resize(t)
  If Not ReSort.Value Like "[1!]" Then
   .Formula = "=ROW()"
   .Font.ColorIndex = 2
   .Value = .Value
  End If
 End With

 If Target.Row = 1 Then
  If ReSort.Value = "!" Then
   MsgBox "2行目ダブルクリックで並べ替えを戻さないと、元に戻りません。", vbExclamation: Exit Sub
  ElseIf Target.Offset(, -1).EntireColumn.Hidden Or Target.Offset(, 1).EntireColumn.Hidden Then
   Rows(1).EntireColumn.Hidden = False
  Else
   CRng.EntireColumn.Hidden = True
   Target.EntireColumn.Hidden = False
  End If
  Application.Goto Range("A1")
 ElseIf Target.Row = 2 And Target.Column > 1 And _
  Target.Offset(, -1).EntireColumn.Hidden _
  Or Target.Offset(, 1).EntireColumn.Hidden Then
  If Target.Offset(-1).Value <> "" And _
   ReSort.Value <> "!" Then
   Rng.Sort _
    Key1:=Target.Offset(-1), _
    Order1:=xlDescending, _
    Header:=xlYes, _
    OrderCustom:=1, _
    MatchCase:=False, _
    Orientation:=xlTopToBottom
   ReSort.Value = "!" 'ソートフラッグ
  Else
   ReSort.EntireColumn.Hidden = False '復元ソート
   Rng.Sort _
    Key1:=ReSort, _
    Order1:=xlAscending, _
    Header:=xlYes, _
    OrderCustom:=1, _
    MatchCase:=False, _
    Orientation:=xlTopToBottom
   ReSort.Value = "" 'ソートフラッグ
  End If
 End If
End Sub
「エクセルでダブルクリックして順に並べる」の回答画像3
    • good
    • 0

「D2セルをダブルクリックすると」ということですが、例えば、D182にロキソニンの個数を入力した後、未入力行を非表示にするために「D2が見えるところまでスクロールしてダブルクリック」では、面倒くさいですよね?まずは、どんなUIにすべきか、もう一度、考えた方が良いと思います。

    • good
    • 0

こんにちは



お求めの回答ではありませんが・・・

オートフィルタを設定しておけば、似たようなことが実現可能と思われます。
あるいは単純に昇順(降順)に並べ替えるだけでよければ、「データ」-「並べ替え」の機能でも可能です。

上記の内容程度の処理であればマクロの記録を取って、簡単な修正をすることでも、マクロの作成は可能と推測します。
    • good
    • 0
この回答へのお礼

有難うございました。

お礼日時:2019/02/16 09:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!