Excel VBA質問箱 IV

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

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


7 / 13234 ツリー ←次へ | 前へ→

【80354】カレンダーに予定を自動入力したい VBA初心者 19/1/31(木) 12:44 質問[未読]

【80357】Re:カレンダーに予定を自動入力したい マナ 19/1/31(木) 20:59 発言[未読]
【80360】Re:カレンダーに予定を自動入力したい マナ 19/1/31(木) 22:47 発言[未読]
【80363】Re:カレンダーに予定を自動入力したい VBA初心者 19/2/1(金) 11:48 質問[未読]
【80366】Re:カレンダーに予定を自動入力したい マナ 19/2/1(金) 22:00 発言[未読]
【80376】Re:カレンダーに予定を自動入力したい VBA初心者 19/2/5(火) 9:23 お礼[未読]
【80380】Re:カレンダーに予定を自動入力したい マナ 19/2/5(火) 19:47 発言[未読]
【80362】Re:カレンダーに予定を自動入力したい VBA初心者 19/2/1(金) 10:05 お礼[未読]

【80357】Re:カレンダーに予定を自動入力したい
発言  マナ  - 19/1/31(木) 20:59 -

引用なし
パスワード
   ▼VBA初心者 さん:

1)カレンダーなのに、日付検索で複数ヒットする可能性がありますか。
Do〜Loopは必要ないのでは?
ということです。

2)シリアル値に変換する必要ありますか。
というか、検索できますか?

3)文法が間違っている
>Range(myObj).Offset(1, 0).Activate
>Q = Range(myObj).Offset(1, 0).Activate
>Set Q = Worksheets("Sheet1").Cells(Z, 2).Value

4)変数名がわかりにくいです(人のこと言えませんが…)

 

【80360】Re:カレンダーに予定を自動入力したい
発言  マナ  - 19/1/31(木) 22:47 -

引用なし
パスワード
   ▼VBA初心者 さん:

こんな感じのことでしょうか

Option Explicit

Sub カレンダー入力()
  Dim rngカレンダー As Range
  Dim rng予定表 As Range
  Dim c As Range
  Dim rng検索 As Range
  Dim 業務 As String
  
  Set rngカレンダー = Worksheets("Sheet2").Range("E1:K10")
  Set rng予定表 = Worksheets("Sheet1").Range("A1").CurrentRegion
  
  For Each c In rng予定表.Columns(1).Cells

    Set rng検索 = rngカレンダー.Find(c.Value, LookAt:=xlWhole)
    
    If Not rng検索 Is Nothing Then
      With rng検索.Offset(1, 0)
        業務 = WorksheetFunction.Trim(c.Offset(0, 1).Value & " " & .Value)
        .Value = Join(Split(業務), vbLf)
      End With
    End If
    
  Next c
  
End Sub


 

【80362】Re:カレンダーに予定を自動入力したい
お礼  VBA初心者  - 19/2/1(金) 10:05 -

引用なし
パスワード
   ▼マナ さん:
>▼VBA初心者 さん:
>
>1)カレンダーなのに、日付検索で複数ヒットする可能性がありますか。
>Do〜Loopは必要ないのでは?
>ということです。
>
>2)シリアル値に変換する必要ありますか。
>というか、検索できますか?
>
>3)文法が間違っている
>>Range(myObj).Offset(1, 0).Activate
>>Q = Range(myObj).Offset(1, 0).Activate
>>Set Q = Worksheets("Sheet1").Cells(Z, 2).Value
>
>4)変数名がわかりにくいです(人のこと言えませんが…)
>
> 

マナ様

お返事ありがとうございます。

上記内容に関して返答させていただきます。

1)カレンダーなのに、日付検索で複数ヒットする可能性がありますか。
Do〜Loopは必要ないのでは?ということです。

→エクセルのカレンダーのテンプレート(1月〜12月でsheetが分けられて表示されるもの)を使っています。sheetは行に5週分の日数、列に日曜〜土曜の曜日が入力されています。その中で、2019年1月のsheetは31日が木曜日なので、残りの金曜日と土曜日の枠には2月1,2日が入力されています。その中で全部のsheetを参照すると重複する箇所が出てくるのでDo〜Loopを使用してみました。


2)シリアル値に変換する必要ありますか。というか、検索できますか?

→自分が入力した日付をそのままカレンダーで検索することが出来なかった(私が無知だということが原因です・・・。)のでシリアル値なら検索できるかなと考え、一度日付を変更して検索するという手段をとりました。
検索は出来ていると思います。


3)文法の指摘、ありがとうございます。


4)大変申し訳ありません。自分だけが今何をやっているのか理解できるようにつけていたので、混乱させてしまいました。

【80363】Re:カレンダーに予定を自動入力したい
質問  VBA初心者  - 19/2/1(金) 11:48 -

引用なし
パスワード
   ▼マナ さん:
>▼VBA初心者 さん:
>
>こんな感じのことでしょうか
>
>Option Explicit
>
>Sub カレンダー入力()
>  Dim rngカレンダー As Range
>  Dim rng予定表 As Range
>  Dim c As Range
>  Dim rng検索 As Range
>  Dim 業務 As String
>  
>  Set rngカレンダー = Worksheets("Sheet2").Range("E1:K10")
>  Set rng予定表 = Worksheets("Sheet1").Range("A1").CurrentRegion
>  
>  For Each c In rng予定表.Columns(1).Cells
>
>    Set rng検索 = rngカレンダー.Find(c.Value, LookAt:=xlWhole)
>    
>    If Not rng検索 Is Nothing Then
>      With rng検索.Offset(1, 0)
>        業務 = WorksheetFunction.Trim(c.Offset(0, 1).Value & " " & .Value)
>        .Value = Join(Split(業務), vbLf)
>      End With
>    End If
>    
>  Next c
>  
>End Sub
>
>
> 
マナ様

先のご返答に引き続きありがとうございます。
とても参考になります。

追加でご質問させていただいてもよろしいでしょうか?

Set rngカレンダー = Worksheets("Sheet2").Range("E1:K10")
Set rng予定表 = Worksheets("Sheet1").Range("A1").CurrentRegion

↑の部分で

rngカレンダーをworksheet2(1月)〜worksheet13(12月)までの.range("A1:H14)までにしたい場合は
Set rngカレンダー = Worksheets(Array("1月", "2月", "3月", "4月", "5月", "6月", "7月", "8月", "9月", "10月", "11月", "12月").range("A1:H14")

で合っていますか?

【80366】Re:カレンダーに予定を自動入力したい
発言  マナ  - 19/2/1(金) 22:00 -

引用なし
パスワード
   ▼VBA初心者 さん:

>追加でご質問させていただいてもよろしいでしょうか?

そのまえに、わたしの提示したマクロでは検索できていませんよね。
それでもよいのですか?

【80376】Re:カレンダーに予定を自動入力したい
お礼  VBA初心者  - 19/2/5(火) 9:23 -

引用なし
パスワード
   ▼マナ さん:
>▼VBA初心者 さん:
>
>>追加でご質問させていただいてもよろしいでしょうか?
>
>そのまえに、わたしの提示したマクロでは検索できていませんよね。
>それでもよいのですか?

マナ様

お返事ありがとうございます。
Set rng検索 = rngカレンダー.Find(c.Value, LookAt:=xlWhole)
    
    If Not rng検索 Is Nothing Then
      With rng検索.Offset(1, 0)
        業務 = WorksheetFunction.Trim(c.Offset(0, 1).Value & " " & .Value)

↑の部分で検索していると思っていましたが、違いますでしょうか・・・?

【80380】Re:カレンダーに予定を自動入力したい
発言  マナ  - 19/2/5(火) 19:47 -

引用なし
パスワード
   ▼VBA初心者 さん:

>↑の部分で検索していると思っていましたが、違いますでしょうか・・・?

そうなのですが、検索できなかったはずでは?
今は検索できていても、いつかまた検索できないとなる場合もあるはずです。
そのときは、γさんの回答を参考にしてください。
実際に経験すると理解できるかと思いますので
わたしからは修正案は提示しません。

-----
で、複数シートの検索の件ですが、
日付から、何月のシートを検索すればよいかわかるはずです。
すべてシートを検索する必要はないという意味です。


 

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