Excel VBA質問箱 IV

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

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


6369 / 13646 ツリー ←次へ | 前へ→

【45360】vlookupの記載に関して 質問(煮詰まった) 06/12/20(水) 17:51 質問[未読]
【45363】Re:vlookupの記載に関して かみちゃん 06/12/20(水) 20:02 発言[未読]
【45385】Re:vlookupの記載に関して 質問(煮詰まった) 06/12/21(木) 15:29 質問[未読]
【45389】Re:vlookupの記載に関して かみちゃん 06/12/21(木) 20:20 発言[未読]
【45405】Re:vlookupの記載に関して 質問(煮詰まった) 06/12/22(金) 9:47 お礼[未読]
【45594】Re:vlookupの記載に関して 質問(煮詰まった) 07/1/5(金) 15:58 質問[未読]
【45597】Re:vlookupの記載に関して Kein 07/1/5(金) 16:44 発言[未読]
【45598】Re:vlookupの記載に関して 質問(煮詰まった) 07/1/5(金) 17:33 質問[未読]
【45599】Re:vlookupの記載に関して りん 07/1/5(金) 18:13 回答[未読]
【45600】Re:vlookupの記載に関して 質問(煮詰まった) 07/1/5(金) 18:25 お礼[未読]

【45360】vlookupの記載に関して
質問  質問(煮詰まった)  - 06/12/20(水) 17:51 -

引用なし
パスワード
    VBAにて、コードから担当者の名前を検索して表示させようとしています。
 またその箇所がブランクでなくなるまで同じ処理を実施させようと
 していますが、エラーが出ます。
 記載の方法がおかしいのでしょか?

 セル4番目の項目に入っている担当者コードを利用して
 担当者シートの担当者コード、担当者名の一覧から
 担当者コードにて、名称を取得してセルの6番目に
 その内容を表示したいのですが・・・ 
 御指摘お願いします。


  i = 2

  Do While Cells(i, 4) <> ""
  
  Cells(i, 6).Select = "=VLOOKUP(cells(i,4).select,担当者!R[-1]C[-5]:R              [157]C[-4],2,FALSE)"
  
  i = i + 1
  
  Loop

【45363】Re:vlookupの記載に関して
発言  かみちゃん  - 06/12/20(水) 20:02 -

引用なし
パスワード
   こんにちは。かみちゃん です。

> 記載の方法がおかしいのでしょか?

おかしいです。
ループ処理の前に、一般操作のVLOOKUP関数の数式設定はできますか?
できるならば、その操作を「マクロの記録」で記録してみてください。
そのあと、ループ処理に応用します。

.Selectの扱い方 や セルの値 を含む変数と文字列の混同をされています。
とりあえず、以下のようなコードになるのではないでしょうか?
提示された要件に合っているかどうかの検証はしていません。

Sub Test()
 Dim i As Long

 i = 2
 Do While Cells(i, 4).Value <> ""
  Cells(i, 6).FormulaR1C1 = "=VLOOKUP(" & Cells(i, 4).Value & ",担当者!R[-1]C[-5]:R[157]C[-4],2,FALSE)"
  i = i + 1
 Loop
End Sub

【45385】Re:vlookupの記載に関して
質問  質問(煮詰まった)  - 06/12/21(木) 15:29 -

引用なし
パスワード
   指摘ありがとうございました。

最終的に作成された表上ではこのようになっています。
=VLOOKUP(150,担当者!A1:B159,2,FALSE)

担当者
150 山田 太郎

としていますがうまく山田 太郎を表示できません。

上記の150を"150"にすると検索できました。

担当者シートは文字列で定義しています。

文字列検索の方法があるのか教えて下さい。

お手数お掛けしますが宜しくお願いします。

【45389】Re:vlookupの記載に関して
発言  かみちゃん  - 06/12/21(木) 20:20 -

引用なし
パスワード
   こんにちは。かみちゃん です。

>文字列検索の方法があるのか教えて下さい。

VBAの質問か一般関数の質問かわかりませんが、
VLOOKUP関数の第一引数のデータ型と第二引数のセル範囲の左端列のデータ型は統一しておくか
もしくは、第一引数の値を第二引数のセル範囲の左端列のデータ型に合わせる必要
があります。
これは、VBAの質問以前の問題です。

合わせる場合は、
テキスト(文字列)型にするのであれば、
TEXT(150,"000")
のような感じです。
数値型にするのであれば、
VALUE("150")
のような感じです。

つまり、
=VLOOKUP(TEXT(150,"000"),担当者!A1:B159,2,FALSE)
としないといけないと思います。

なお、文字列とは、書式設定における文字列では、たまにうまくいかないことがあるようです。

【45405】Re:vlookupの記載に関して
お礼  質問(煮詰まった)  - 06/12/22(金) 9:47 -

引用なし
パスワード
   助かりました。
試してみます。

【45594】Re:vlookupの記載に関して
質問  質問(煮詰まった)  - 07/1/5(金) 15:58 -

引用なし
パスワード
    固定文字のケースはうまく行きましたが、変数利用の場合は
 どのようにすればいいのか教えて下さい。

 '●担当者名表示

  i = 2
 
  Do While Cells(i, 4).Value <> ""
  
  Cells(i, 6).FormulaR1C1 = "=VLOOKUP(" & (Cells(i, 4).Value) & ",担当者!R[-1]C[-5]:R[157]C[-4],2,FALSE)"
  
  
  i = i + 1
 
  Loop

  文字列で定義しています。

  お手数ですが宜しくお願いします。

【45597】Re:vlookupの記載に関して
発言  Kein  - 07/1/5(金) 16:44 -

引用なし
パスワード
   普通、そのようなところは変数を使う必要がありませんね。
かみちゃんさんの式をお借りして・・

Range("D2", Range("D65536").End(xlUp)).Offset(, 2) _
.Formula = "=VLOOKUP(TEXT(D2,""000""),担当者!A1:B159,2,FALSE)"

ぐらいでいいのでは ?

【45598】Re:vlookupの記載に関して
質問  質問(煮詰まった)  - 07/1/5(金) 17:33 -

引用なし
パスワード
   ▼Kein さん:
>普通、そのようなところは変数を使う必要がありませんね。
>かみちゃんさんの式をお借りして・・
>
>Range("D2", Range("D65536").End(xlUp)).Offset(, 2) _
>.Formula = "=VLOOKUP(TEXT(D2,""000""),担当者!A1:B159,2,FALSE)"
>
>ぐらいでいいのでは ?

実は、3000行ぐらいある明細を得意先、各担当毎分け
毎月1回集計処理をし明細を作成してフォローを実施しています。

この担当や得意先が通常10行程度なのですが、最大100行とかになり
手作業が手間でマクロで処理したいと思い色々質問していました。

 毎回手作業でもできますが、できればマクロにしたく相談しています。

【45599】Re:vlookupの記載に関して
回答  りん E-MAIL  - 07/1/5(金) 18:13 -

引用なし
パスワード
   質問(煮詰まった) さん、こんばんわ。

>>Range("D2", Range("D65536").End(xlUp)).Offset(, 2) _
>>.Formula = "=VLOOKUP(TEXT(D2,""000""),担当者!A1:B159,2,FALSE)"
Keinさん、かみちゃんさんの式をそのまま拝借。
担当者の検索範囲は固定ですよね。

> この担当や得意先が通常10行程度なのですが、最大100行とかになり
> 手作業が手間でマクロで処理したいと思い色々質問していました。

というわけで、
  F2に数式を入力
  D列にデータが入っているところまで下方向にコピー(FillDown)
これを記録して、分岐を入れて整理するとこんな感じ。

Sub TEST()
  Dim Rmax As Long
  '
  With Application.ActiveSheet
   Rmax = .Range("D10000").End(xlUp).Row '最下行番号
   'データが入っていれば
   If Rmax > 1 Then
    .Range("F2").Formula = _
      "=VLOOKUP(text(D2,""000""),担当者!$A$1:$B$159,2,FALSE)" '式
    If Rmax > 2 Then _
      .Range("F2:F" & Rmax).FillDown '下方向へコピー
   End If
  End With
End Sub

こんな感じです。

【45600】Re:vlookupの記載に関して
お礼  質問(煮詰まった)  - 07/1/5(金) 18:25 -

引用なし
パスワード
   たすかりました。

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