
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ランキング
-
【マクロ】シートの変数へ入れ...
-
【マクロ】並び替えの範囲が、...
-
【マクロ】売上一覧YYYYMMDDHHS...
-
質問58753 このコードでうまく...
-
【マクロ】開いているブックの...
-
エクセルのマクロについて教え...
-
改行文字「vbCrLf」とは
-
testファイル内にある複数のpng...
-
エクセルVBA 検索結果を隣のシ...
-
以下のプログラムの実行結果は...
-
Vba セルの4辺について罫線が有...
-
エクセルのVBAコードについて教...
-
VBAの質問(Msgboxについて)です
-
Excelのマクロについて教えてく...
-
エクセルのVBAコードについて教...
-
Excelのマクロについて教えてく...
-
VBAでユーザーフォームを指定回...
-
vbsでのwebフォームへの入力制限?
-
エクセルの改行について
-
vb.net(vs2022)のtextboxのデザ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
testファイル内にある複数のpng...
-
改行文字「vbCrLf」とは
-
エクセルVBA 検索結果を隣のシ...
-
vb.net(vs2022)のtextboxのデザ...
-
エクセルのVBAコードと数式につ...
-
【マクロ】切取りの場合、形式...
-
【ExcelVBA】5万行以上のデー...
-
ExcelVBAでパワポを操作したい
-
(EXCEL超初心者)EXCELの関数(ま...
-
エクセルの改行について
-
Excelマクロで使うVBAコードを...
-
ワードの図形にマクロを登録で...
-
【マクロ】変数を使った、文字...
-
VBAでFOR NEXT分を Application...
-
VBAの質問(Msgboxについて)です
-
エクセルのVBAコードについて教...
-
Excelマクロで使うVBAコードを...
-
Excelのマクロについて教えてく...
-
VBAの「To」という語句について
-
【マクロ】値を渡されたプロシ...
おすすめ情報
誤記がありました。。。
日々売れたものを随時"数"⇒日々売れたものを随時"製品名"
tom04様>
すいません。構文の内容を補足で追加していただけませんでしょうか・・・