Excel VBA質問箱 IV

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

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


4658 / 13644 ツリー ←次へ | 前へ→

【55373】ワークシート関数だと動かない ねこめ 08/5/1(木) 12:20 お礼[未読]
【55374】Re:ワークシート関数だと動かない テト 08/5/1(木) 12:35 発言[未読]
【55375】Re:ワークシート関数だと動かない Jaka 08/5/1(木) 12:58 発言[未読]
【55376】Re:ワークシート関数だと動かない ねこめ 08/5/1(木) 14:13 お礼[未読]

【55373】ワークシート関数だと動かない
お礼  ねこめ  - 08/5/1(木) 12:20 -

引用なし
パスワード
   はじめまして。お世話になります。
下のように入力シートがあり、データシートにデータを転記したいのですが、
このデータだと、
【入力】の「月分」(B4)と【データ】の1行目で転記する月を決め、
【入力】の「該当者」(B3〜B7)と【データ】のA列で該当者を決め、
該当するセルに【入力】の「日付」(B2)を入れたいのですが、

【入力】
  A   B
1 月分  4月                
2 日付  4月11日                
3 該当者    東3                
4    西2                
5    南1                
6    北3                
7    東1                


【データ】
  A   B   C   D   E   F
1     4月  5月  6月  7月  8月
2 東1    4/11                
3 東2                    
4 東3    4/11                
5 西1            
8 西2  4/11
9 西3
10 南1  4/11
13 南2
14 南3
15 北1
16 北2
17 北3  4/11

こんな感じで作ってみたのですが、うまくいきません。

Sub test()
Dim gyou As Long
Dim retu As Long
Dim kazu As Long

For kazu = 2 To 17

gyou = WorksheetFunction.Match(Sheets("入力").Cells(kazu, 2), Sheets("データ").Range("D1:D65536"), 0)
retu = WorksheetFunction.Match(Sheets("入力").Range("B1"), Sheets("データ").Range("A1:IV1"), 0)
Sheets("データ").Cells(gyou, retu).Value = Sheets("入力").Range("B2").Value
Next
End Sub

ご指導よろしくお願いします。

【55374】Re:ワークシート関数だと動かない
発言  テト  - 08/5/1(木) 12:35 -

引用なし
パスワード
   各チェック処理は、任意に入れてね。

――――――――――――――――――――――――――――――
Dim wsIn As Worksheet
Dim wsOut As Worksheet
Dim inMonth As String
Dim inDate As String
Dim rng As Range
Dim target As Range
Dim tRow As Long
Dim tCol As Long

Set wsIn = ActiveWorkbook.Worksheets("入力")
Set wsOut = ActiveWorkbook.Worksheets("データ")

inMonth = wsIn.Range("B1").Value
inDate = wsIn.Range("B2").Value
Set rng = wsIn.Range("B3:B" & wsIn.Range("B3").End(xlDown).Row)

For Each target In rng
  tCol = wsOut.Range("1:1").Find(inMonth).Column
  tRow = wsOut.Range("A:A").Find(target.Value).Row

  With wsOut.Cells(tRow, tCol)
    .NumberFormat = "m/dd"
    .Value = inDate
  End With
Next target
――――――――――――――――――――――――――――――

【55375】Re:ワークシート関数だと動かない
発言  Jaka  - 08/5/1(木) 12:58 -

引用なし
パスワード
   >gyou = WorksheetFunction.Match(Sheets("入力").Cells(kazu, 2), Sheets("データ").Range("D1:D65536"), 0)
>retu = WorksheetFunction.Match(Sheets("入力").Range("B1"), Sheets("データ").Range("A1:IV1"), 0)
日付の入ったセルを検索値として、日付の入ったセルをMatchさせるには、
まず、どちらのセルも年号から記述されていることが前提になります。

また、Matchを使って、検索値の指定にセルを指定するだけではだめです。
例えば、
Match(Sheets("入力").Cells(kazu, 2),・・・
の部分は、シリアル値で指定する必要があります。

Sheets("入力").Cells(kazu, 2)
 ↓
CLng(Sheets("入力").Cells(kazu, 2).Value)
もしくは、
Sheets("入力").Cells(kazu, 2).Value2

それと、
エクセル関数使用時にWorksheetFunctionをつけると、一致する物が見つからない場合、実行エラーになります。

回避方1

Dim Ans As Valiant
Ans = Application.Match(Sheets("入力").Cells(kazu, 2).Value・・・・
If iserror(Ans) Then
  Msgbox "見つかりません。"
end if

とか。

【55376】Re:ワークシート関数だと動かない
お礼  ねこめ  - 08/5/1(木) 14:13 -

引用なし
パスワード
   テト様
ありがとうございます。
Set rng = wsIn.Range("B3:B" & wsIn.Range("B3").End(xlDown).Row)
の部分でエラーが出てしまい、時間がかかってしまいました。
ワークシート上で関数を使って表示していたのが原因でした。
なんとか理解できましたが、使いこなせるよう頑張ってみます。

Jaka様
>エクセル関数使用時にWorksheetFunctionをつけると、一致する物が見つからない場合、
>実行エラーになります
そうなんです。そこで苦しんでいました。ご提示いただいた案でうまくいきました。
ありがとうございました。

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