Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1944 / 13645 ツリー ←次へ | 前へ→

【70911】セルの列の指定について教えてください ちーすけ 12/1/16(月) 23:33 質問[未読]
【70914】Re:セルの列の指定について教えてください kanabun 12/1/17(火) 9:17 発言[未読]
【70921】Re:セルの列の指定について教えてください ちーすけ 12/1/17(火) 10:48 発言[未読]
【70922】Re:セルの列の指定について教えてください kanabun 12/1/17(火) 11:49 発言[未読]
【70923】Re:セルの列の指定について教えてください kanabun 12/1/17(火) 11:52 発言[未読]
【70924】Re:セルの列の指定について教えてください ちーすけ 12/1/17(火) 14:39 発言[未読]
【70925】Re:セルの列の指定について教えてください kanabun 12/1/17(火) 14:47 発言[未読]
【70926】Re:セルの列の指定について教えてください ちーすけ 12/1/17(火) 15:14 お礼[未読]

【70911】セルの列の指定について教えてください
質問  ちーすけ  - 12/1/16(月) 23:33 -

引用なし
パスワード
   はじめまして。今、VBAを勉強しているものです。ウィンドウを表示させ、そこにIDを入力するとシートのA列にIDを表示させ、B列には名前、C列には出勤時間を表示させ、もう一度IDを入力すると退勤時間がD列に表示されるものを作成しています。
下記に示してあるのですが、名前の表示の際の列の指定の所でエラーが起きてしまいます。どのように変更したらようのか教えて下さい。よろしくおねがいします。


Private Sub CommandButton1_Click()
Dim Rng As Range
Dim Col As Integer
Dim id As String
Dim str As String
Dim FoundCell As Range
Dim joh As Range


'名前を表示
id = TextBox1.Value
Set FoundCell = Range("T:T").Find(What:=TextBox1)
If FoundCell Is Nothing Then
MsgBox "番号がありません"
Else
MsgBox FoundCell.Offset(0, 1)
If Not FoundCell Is Nothing Then
Range("B") = FoundCell.Next      ←ここの部分
End If
End If

id = TextBox1.Value
With Worksheets("Sheet1")
'重複のチェック
If Application.WorksheetFunction.CountIf(.Range("A:A"), id) = o Then
'出勤処理
Col = 2 'B列
Set Rng = .Range("A" & Rows.Count).End(xlUp).Offset(1) 'A列最終行の取得
Rng.Value = id '番号出力
Else
'退勤処理
Set Rng = .Range("A:A").Find(id)
Col = 3 'C列
End If
End With
'時刻出力
With Rng.Offset(, Col)
.Value = Now() '時刻出力
.NumberFormat = "yy/mm/dd hh:mm" 'セルの書式設定
End With

TextBox1.Value = ""
TextBox1.SetFocus

str = "完了"
MsgBox (str)


End Sub

【70914】Re:セルの列の指定について教えてください
発言  kanabun  - 12/1/17(火) 9:17 -

引用なし
パスワード
   ▼ちーすけ さん:こんにちは〜

>'名前を表示
>id = TextBox1.Value
>Set FoundCell = Range("T:T").Find(What:=TextBox1)
>If FoundCell Is Nothing Then
>MsgBox "番号がありません"
>Else
>MsgBox FoundCell.Offset(0, 1)
>If Not FoundCell Is Nothing Then
>Range("B") = FoundCell.Next      ←ここの部分
>End If
>End If

ちょっとインデントがなくて読みにくいので、エラー箇所までインデントをつけてみると
こういうことですね?

'名前を表示
id = TextBox1.Value
Set FoundCell = Range("T:T").Find(What:=id)
If FoundCell Is Nothing Then
  MsgBox "番号がありません"
Else
  MsgBox FoundCell.Offset(0, 1)
  If Not FoundCell Is Nothing Then
    Range("B") = FoundCell.Next      '←ここの部分
  End If
End If

それで、
> If FoundCell Is Nothing Then
は 検索で見つからなかったとき、
その下の
>Else
は 何も言わなくても、「該当セルが見つかったとき」です。
だから
>   If Not FoundCell Is Nothing Then
は不要です。

それで その部分は 構文的には
Else
  MsgBox FoundCell.Offset(0, 1)
  Range("B") = FoundCell.Next      '←ここの部分
End If
だけでよいことになりますが、
さて、
>  Range("B") = FoundCell.Next      '←ここの部分
の1行でやろうとしている処理内容はどのようなものですか?
日本語で説明してもらえると、レスがもらえると思いますよ

【70921】Re:セルの列の指定について教えてください
発言  ちーすけ  - 12/1/17(火) 10:48 -

引用なし
パスワード
   ▼kanabun さん:返信ありがとうございます。

日本語での説明が少なくてはすみませんでした。
 Range("B") = FoundCell.Next      '←ここの部分
ここの部分でやりたいことは、idを入力するとセルのB列に名前が表示されるようにし、次にidが入力されたら下の行に名前を表示させるようにしたいです。名前の表示自体は、T列にidを書いておき、隣のセルを読み込ませて表示させるようにしました。

よろしくお願いします。

【70922】Re:セルの列の指定について教えてください
発言  kanabun  - 12/1/17(火) 11:49 -

引用なし
パスワード
   ▼ちーすけ さん:
> Range("B") = FoundCell.Next      '←ここの部分
>ここの部分でやりたいことは、idを入力するとセルのB列に名前が表示されるようにし、
> 次にidが入力されたら下の行に名前を表示させるようにしたいです。
> 名前の表示自体は、T列にidを書いておき、隣のセルを読み込ませて表示させるようにしました。

ごめんなさい。↑説明してもらってもまだ分からないのですが?
TextBox の id がA列にあるか、まだかで、場合分けし、
idがまだ未記入の時(countifが 0 を返すとき) だけ
   T列を検索して id を見つけ、U列の対応する「名前」を取得。
  「名前」をB列に書き込み、C列に 時刻を記入する。
という処理順でいいような気がするのですが?

Private Sub CommandButton1_Click()
Dim FoundCell As Range
Dim rngID As Range
Dim Col As Integer
Dim id As String

'TextBox1 に入力された名前を変数idに代入
id = TextBox1.Value
With Worksheets("Sheet1")
  'A列に このIDが記載済みか新規か調べる
  '新規IDのばあい
  If WorksheetFunction.CountIf(.Range("A:A"), id) = 0 Then
    'A列最終行の取得
    Set rngID = .Range("A" & .Rows.Count).End(xlUp).Offset(1)
    rngID.Value = id '番号出力
    'idに対応する名前をB列に表示
    Set FoundCell = Range("T:T").Find(id, , xlFormulas, xlWhole)
    If FoundCell Is Nothing Then
      MsgBox "番号がありません"
      Exit Sub
    End If
    rngID.Offset(, 1).Value = FoundCell.Offset(, 1).Value '名前出力
    Col = 3 'C列
    
  Else '記載済みのばあい
    '退勤処理
    Set rngID = .Range("A:A").Find(id)
    Col = 4 'D列
  End If
End With
'時刻出力
With rngID.Item(1, Col)
  .Value = Now() '時刻出力
  .NumberFormat = "yy/mm/dd hh:mm" 'セルの書式設定
End With

TextBox1.Value = ""
TextBox1.Select

MsgBox "完了"

End Sub

問題あったら、レス下さい。

【70923】Re:セルの列の指定について教えてください
発言  kanabun  - 12/1/17(火) 11:52 -

引用なし
パスワード
   ドットが足りませんでした m(_ _)m

> Set FoundCell = Range("T:T").Find(id, , xlFormulas, xlWhole)
       ↓
Set FoundCell = .Range("T:T").Find(id, , xlFormulas, xlWhole)

【70924】Re:セルの列の指定について教えてください
発言  ちーすけ  - 12/1/17(火) 14:39 -

引用なし
パスワード
   ▼kanabun さん:ありがとうございます。

kanabunさんから頂いたものでコンパイル行ってみましたが、
コンパイルエラー:引数は省略できませんと表示が出ました。
TextBox1.Selectが問題があるようです。

よろしくお願いします。

【70925】Re:セルの列の指定について教えてください
発言  kanabun  - 12/1/17(火) 14:47 -

引用なし
パスワード
   ▼ちーすけ さん:

>kanabunさんから頂いたものでコンパイル行ってみましたが、
>コンパイルエラー:引数は省略できませんと表示が出ました。
>TextBox1.Selectが問題があるようです。

ごめん。TextBox1 がActiveXのでテストしてました。
TextBox1.SetFocus に戻して 検証願います m(_ _)m

【70926】Re:セルの列の指定について教えてください
お礼  ちーすけ  - 12/1/17(火) 15:14 -

引用なし
パスワード
   ▼kanabun さん:

なんどもありがとうございます。
コンパイルしてみたら、きちんと動作いたしました。
本当にありがとうございました。
これからもVBAを勉強していきたいと思います。

1944 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free