No.3ベストアンサー
- 回答日時:
No.1です。
>構文の内容を補足で追加して・・・
コードの説明というコトでしょうか?
やっていることはINDEX関数のような感じです。
日付で行番号、商品名で列番号を取得し、そのセルに「1」をプラスする!といった感じのコードです。
前回のコードに少しだけコメントを入れておきます。
Private Sub Worksheet_Change(ByVal Target As Range)
'//変数の宣言//
Dim lastCol As Long, myRng As Range
Dim c As Range, r As Range
'//変化セルの・・・//
With Target
'//セル番地が「A1」の場合//
If .Address = "$A$1" And .Count = 1 Then
'//空白以外の場合//
If .Value <> "" Then
'//1行目最終列(入力済みの商品名の最終列番号)を取得//
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
'//myRngに商品入力済みの1行目セル範囲を格納//
Set myRng = Range(Cells(1, "C"), Cells(1, lastCol))
'//日付セル列B列の中の「今日」のシリアル値のセルを取得(←行番号取得のため)★//
Set c = Range("B:B").Find(what:=DateValue(Date), LookIn:=xlFormulas, lookat:=xlWhole)
If c Is Nothing Then '//←念のため//
MsgBox "今日の日付がありません。"
Exit Sub
End If
'//myRngの範囲内でA1セルに入力した商品名のセルを取得(←列番号取得のため)//
Set r = myRng.Find(what:=.Value, LookIn:=xlValues, lookat:=xlWhole)
'//A1セルの商品名がmyRngにない場合は・・・//
If r Is Nothing Then
If MsgBox("登録がありません。" & vbCrLf & "追加しますか?", vbYesNo) = vbYes Then
'//1行目最終列の一つ右となりにA1セルの値を代入//
Cells(1, lastCol + 1) = .Value
'//上記セルに「1」を代入//
Cells(c.Row, lastCol + 1) = 1
End If
Else
'//↓myRngにA1の商品名が存在する場合、そのセルの・・・//
With Cells(c.Row, r.Column)
'//値=値+1とする//
.Value = .Value + 1
End With
End If
'//A1セルを消去//
.ClearContents
'//A1セルを選択//
.Select
End If
End If
End With
End Sub
※ 気を付けなければならない点としては
VBAで日付セル(シリアル値)を検索する場合、単純に「Find」では検索できないことがほとんどです。
上記コード内の「★」の下の行のような感じだとお使いのバージョンであれば
表示形式がどのようになっていても取得できます。m(_ _)m
No.2
- 回答日時:
こんばんは!
増えていくのは「1」ずつでよいのですよね?
一例です。シートモジュールにしてください。
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lastCol As Long, myRng As Range
Dim c As Range, r As Range
With Target
If .Address = "$A$1" And .Count = 1 Then
If .Value <> "" Then
lastCol = Cells(1, Columns.Count).End(xlToLeft).Column
Set myRng = Range(Cells(1, "C"), Cells(1, lastCol))
Set c = Range("B:B").Find(what:=DateValue(Date), LookIn:=xlFormulas, lookat:=xlWhole)
If c Is Nothing Then '//←念のため//
MsgBox "今日の日付がありません。"
Exit Sub
End If
Set r = myRng.Find(what:=.Value, LookIn:=xlValues, lookat:=xlWhole)
If r Is Nothing Then
If MsgBox("登録がありません。" & vbCrLf & "追加しますか?", vbYesNo) = vbYes Then
Cells(1, lastCol + 1) = .Value
Cells(c.Row, lastCol + 1) = 1
End If
Else
With Cells(c.Row, r.Column)
.Value = .Value + 1
End With
End If
.ClearContents
.Select
End If
End If
End With
End Sub
こんな感じではどうでしょうか?m(_ _)m
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【マクロ】ボタンを押すごとに、A1セル、A2セル、A3セルに日付を入力 3 2023/01/25 00:12
- Excel(エクセル) ユーザー定義について質問です。 2 2023/06/28 13:21
- Excel(エクセル) エクセルで月末、月初の判定をしたい。 4 2022/05/18 23:22
- Excel(エクセル) マクロだと数式が表示される 2 2022/09/10 14:48
- Excel(エクセル) エクセルの昇順での数値入力のミスの見つけ方を教えてください。 4 2022/06/26 20:41
- Excel(エクセル) 【EXCEL】=セル&セルが上手く表示できない。 7 2022/09/04 21:32
- Excel(エクセル) エクセルの数式で教えてください。 2 2022/10/25 17:10
- Excel(エクセル) Excelについて A1からA12まで、1月〜12月と入力し、 B1からB12の範囲に、C1とD1に 4 2022/05/26 22:48
- Visual Basic(VBA) 顧客ごとに違う点検案内を作成するマクロ 4 2022/09/16 05:34
- Excel(エクセル) エクセルの数式で教えてください。 2 2023/02/10 17:07
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルのマクロについて教え...
-
ExcelVBA修正のお願い
-
エクセルのマクロについて教え...
-
VBAコードについて教えてくださ...
-
[vb.net] 起動したFrom2を閉じ...
-
エクセルのVBAコードについて教...
-
[VB.net] ボタン(Flat)のEnable...
-
エクセルのマクロについて教え...
-
エクセルのマクロについて教え...
-
VBA 別ブックからコピペしたい...
-
重複確認
-
Excel(M365) Vlookup/セル反転(...
-
エクセルのVBAコードについて教...
-
コードを直していただきたいで...
-
{ CONTROL Forms.Label.1}が...
-
マクロの記録を使用したマクロ...
-
Excel VBA 定義されたプロージ...
-
VBA 複数の各シートに行を追加...
-
配列のペースト出力結果の書式...
-
VBA実行後に元のセルに戻りたい
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VBAなくなるの?
-
VBAでCOPYを繰り返すと、処理が...
-
vba 削除
-
プログラミング
-
Excelのマクロについて教えてく...
-
Excelのマクロについて教えてく...
-
エクセルのVBAコードについて教...
-
久しぶりのプログラミング
-
ユーザーフォームに別シートか...
-
エクセルVBAコードで教えて下さ...
-
VBA 別ブックからコピペしたい...
-
ExcelのVBAコードについて教え...
-
VBAコードについて教えてくださ...
-
vba アクティブシートの名前変...
-
Excelのマクロについて教えてく...
-
エクセルVBA
-
Geogebraの操作方法について
-
マクロの記録を使用したマクロ...
-
Excel(M365) Vlookup/セル反転(...
-
Excel 範囲指定スクショについ...
おすすめ情報
誤記がありました。。。
日々売れたものを随時"数"⇒日々売れたものを随時"製品名"
tom04様>
すいません。構文の内容を補足で追加していただけませんでしょうか・・・