VBAを使って、出来ますでしょうか?
複数のセルに書かれている日付を
1つのセルにまとめて表示させたいと考えています。
日付は、
10/3,トマト(,で別セルとします)
4/5,トマト
5/6,レタス
3/4,レタス
1/3,レタス
のように縦に並んでいまして、
下の行(1/3)から1つのセルに入れていき
5/6,レタス,1/3・3/4・5/6と
[1/3・3/4・5/6]を1つのセルに入れ、
しかも出来れば「・」を間に入れて
1つのセルに表示させたいのです。
そして、同様にトマトにおいても
10/3,トマト,4/5・10/3と表示させ、
最終的には、
10/3,トマト,4/5・10/3
4/5,トマト
5/6,レタス,1/3・3/4・5/6
3/4,レタス
1/3,レタス
と表示させたいと思っております。
このとき、レタスとトマトの個数は数えなければ
わかりません。
大変難しいかと思いますが、
ぜひお知恵を貸して頂ければ幸いです。
No.1ベストアンサー
- 回答日時:
>大変難しいかと思いますが、
この手の同様のご質問は、多いですね。
なお、A列の日付は降順、B列の文字列は昇順に並び、並び替えは、B列を優先させたものとします。
「,」区切りは、ないものとして解釈しました。
念のために、並び替えはします。
A列の日付は降順、B列の文字列は昇順に並び、並び替えは、B列を優先させたものとします。
データの先頭は、A1 にしました。
元のデータは消すことはありません。
これで、試してみてください。
'<標準モジュール>
Sub test1()
Dim BaseArray As Variant
Dim myCol As Integer
Dim myRow As Long
Dim Dat1 As String, Dat2 As String
Dim i As Long
Application.ScreenUpdating = False
With Range("A1").CurrentRegion.Columns("A:B") '先頭の場所から二列の範囲
.Sort Key1:=Range("B1"), Order1:=xlAscending, _
Key2:=Range("A1"), Order2:=xlDescending, _
Header:=xlGuess, OrderCustom:=1, _
MatchCase:=False, Orientation:=xlTopToBottom
'念のために並び替え
.Offset(, 2).Resize(, 1).ClearContents
.Offset(, 2).Resize(, 1).HorizontalAlignment = xlLeft
BaseArray = .Value
myCol = .Column
myRow = .Row
End With
Dat1 = BaseArray(UBound(BaseArray, 1), 2)
Dat2 = Format$(BaseArray(UBound(BaseArray, 1), 1), "mm/dd")
For i = UBound(BaseArray, 1) - 1 To LBound(BaseArray, 1) Step -1
If Dat1 = BaseArray(i, 2) Then
Dat2 = Dat2 & "・" & Format$(BaseArray(i, 1), "mm/dd")
Else
Cells(i + myRow, myCol + 2).NumberFormat = "mm/dd"
Cells(i + myRow, myCol + 2).Value = Dat2
Dat1 = BaseArray(i, 2)
Dat2 = Format(BaseArray(i, 1), "mm/dd")
End If
Next i
Cells(i + myRow, myCol + 2).NumberFormat = "mm/dd"
Cells(i + myRow, myCol + 2).Value = Format$(Dat2, "mm/dd")
Application.ScreenUpdating = True
End Sub
この回答への補足
申し訳ございません もう一点教えてください。
現在B列を基準に判断していますが、
これがD列に入っていて、D列で判断したい
場合はどこを変えればよろしいのでしょうか?
配列は勉強していないので、勉強不足で申し訳ございません。
この度は本当にありがとうございました。
いろいろと数字を打ち変えてみたら変更もうまくいきました。
また機会がありましたら宜しくお願いいたします。
No.2
- 回答日時:
もう回答がありますが、せっかく作ったので回答させて頂きます。
日付のセルをアクティブセルにしてマクロを呼び出します。
日付を連結したデータを入れるセルは、あらかじめ消去しておいてください。自動的には、消去していません。(検査中に消していけばいいですけど)
'----------------------------------------------
Public Sub dateCat() '先頭の日付のセルをアクティブセルで呼び出し
Dim name, list
Dim a(), i, x
Dim r As Range, top As Range, bottom As Range
Do While ActiveCell.Value <> ""
Set top = ActiveCell
name = ActiveCell.Offset(0, 1).Value '名前を取り出す
i = 0
Do While name = top.Offset(i, 1).Value
i = i + 1 '名前が同じ間
Loop
Set bottom = top.Offset(i - 1, 0)
Set r = Range(top, bottom)
ReDim a(r.count)
i = 0
For Each x In r
a(i) = x.Value
i = i + 1
Next
Call ArraySort(a, True)
list = ""
For Each x In a
list = list & Format(x, "m/d・")
Next
list = Left(list, Len(list) - 1) '最後の・を取る
ActiveCell.Offset(0, 2).Value = list '最初の行にリストを入力
bottom.Offset(1, 0).Activate 'アクティブセルの設定
Loop
End Sub
Private Sub ArraySort(a, Optional ascending = 0) '配列をソートする、規定値は大きいもの順
Dim wk, i As Integer, j As Integer, k As Integer
Dim n
n = UBound(a)
k = n \ 2
Do While (k > 0) 'シェルソート
For i = 0 To n - k
j = i
Do While (j >= 0)
If a(j) > a(j + k) Then
wk = a(j)
a(j) = a(j + k)
a(j + k) = wk
j = j - k
Else
Exit Do
End If
Loop
Next
k = k \ 2
Loop
If ascending = 0 Then '逆順にする
i = 0: j = n
Do Until (i >= j)
wk = a(i)
a(i) = a(j)
a(j) = wk
i = i + 1: j = j - 1
Loop
End If
End Sub
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- ダイエット・食事制限 サラダダイエット成功した方 朝 普通に食べる 昼・夜 サラダ(内容:レタス、トマト、アボカド、鶏むね 1 2023/03/01 22:55
- 食べ物・食材 キャベツとレタス・白菜 8 2023/01/13 18:00
- Excel(エクセル) エクセルの祝日に色が反映しない 4 2022/05/18 09:58
- Visual Basic(VBA) エクセルのマクロで対象ごとにシート分けしてその内容をセルに書き込みたい 9 2022/08/24 13:23
- Excel(エクセル) フォルダ内のエクセルファイルを開かずにデータ採取する関数式 2 2022/12/22 22:15
- Excel(エクセル) Excel 特定セルの数値を参照したセルの0表示が空白にならないのはどうしてか? 3 2022/04/28 22:23
- Excel(エクセル) Excelで数式をそのままコピーしたい どうすればいいですか? 4 2022/09/16 02:16
- Excel(エクセル) Excel2019、2021の日付、曜日の表示について 2 2022/11/29 15:01
- Excel(エクセル) 【エクセル】複雑な関数を教えてください 1 2023/06/05 18:09
- Excel(エクセル) エクセルの数式について教えてください。 2 2023/03/04 09:54
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
不味~い(冷凍)ハンバーグを...
-
【昼食の献立】「炊き込みご飯(...
-
ハンバーグを根気よく焼いても...
-
賞味期限から5日経ったミンチ肉...
-
「メンチカツ」は「ハンバーグ...
-
お昼間に作りおきして夕飯に出...
-
常温放置してしまったサラダに...
-
3〜5ヶ月前に冷凍したハンバー...
-
レタスについている虫処理後ど...
-
弁当にタマゴサラダやポテトサ...
-
サラダって前の日に作ったやつ...
-
2人晩御飯のみで食費2万円は...
-
失敗したポテトサラダのアレンジ
-
ハンバーグを生焼けで食べてし...
-
消費期限切れ(1日目)食べれ...
-
失敗した茶碗蒸しの使い道を考...
-
激辛スナックをマイルドに食べ...
-
こんにちは!今日は久しぶりに...
-
小豆でマクロビ的塩あんこを作...
-
ハンバーグの牛骨は異物か否か
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
不味~い(冷凍)ハンバーグを...
-
チキンフィレオとチキンタツタ...
-
3〜5ヶ月前に冷凍したハンバー...
-
賞味期限から5日経ったミンチ肉...
-
サラダって前の日に作ったやつ...
-
消費期限切れ(1日目)食べれ...
-
ハンバーグを根気よく焼いても...
-
こんにちは!今日は久しぶりに...
-
2人晩御飯のみで食費2万円は...
-
お昼間に作りおきして夕飯に出...
-
デパ地下に通うような若い女性...
-
常温放置してしまったサラダに...
-
失敗したポテトサラダのアレンジ
-
これは食べれるんですか? 味見...
-
弁当にタマゴサラダやポテトサ...
-
ハンバーグを生焼けで食べてし...
-
サニーレタスっていくら洗って...
-
生焼けのハンバーグについて
-
生野菜サラダの具材
-
手作りハンバーグの賞味期限
おすすめ情報