Excel VBA質問箱 IV

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

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


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

【30759】至急教えていただけませんか?【Vlookup】 haramama 05/11/4(金) 14:39 質問[未読]
【30760】Re:至急教えていただけませんか?【Vlooku... Statis 05/11/4(金) 14:44 発言[未読]
【30761】Re:至急教えていただけませんか?【Vlooku... かみちゃん 05/11/4(金) 14:46 発言[未読]
【30767】Re:至急教えていただけませんか?【Vlooku... haramama 05/11/4(金) 15:22 質問[未読]
【30769】Re:至急教えていただけませんか?【Vlooku... Statis 05/11/4(金) 15:26 回答[未読]
【30773】Re:至急教えていただけませんか?【Vlooku... haramama 05/11/4(金) 15:38 お礼[未読]
【30770】Re:至急教えていただけませんか?【Vlooku... とまと 05/11/4(金) 15:32 回答[未読]
【30771】Re:至急教えていただけませんか?【Vlooku... とまと 05/11/4(金) 15:35 回答[未読]
【30774】Re:至急教えていただけませんか?【Vlooku... かみちゃん 05/11/4(金) 15:39 発言[未読]
【30780】Re:至急教えていただけませんか?【Vlooku... haramama 05/11/4(金) 16:24 質問[未読]
【30781】Re:至急教えていただけませんか?【Vlooku... かみちゃん 05/11/4(金) 16:40 発言[未読]
【30785】Re:至急教えていただけませんか?【Vlooku... haramama 05/11/4(金) 17:23 お礼[未読]
【30787】Re:至急教えていただけませんか?【Vlooku... とまと 05/11/4(金) 18:06 回答[未読]
【30806】Re:至急教えていただけませんか?【Vlooku... haramama 05/11/4(金) 23:01 お礼[未読]
【30807】Re:至急教えていただけませんか?【Vlooku... こたつねこ 05/11/4(金) 23:22 回答[未読]
【30864】Re:至急教えていただけませんか?【Vlooku... とまと 05/11/6(日) 8:40 回答[未読]
【30916】Re:至急教えていただけませんか?【Vlooku... haramama 05/11/7(月) 9:19 お礼[未読]

【30759】至急教えていただけませんか?【Vlookup】
質問  haramama  - 05/11/4(金) 14:39 -

引用なし
パスワード
   こんにちは。
いつもこちらで大変お世話になっているharamamaです。
ありがとうございます。

初心者で分からないことだらけですが、
至急教えて頂けると大変助かります!

VLOOKUP関数を使って、以下のように一致しなかったら×
そうでなければ検索値をそのまま表示するように
書きましたが、全部×になってしまいます。
一致しているものは複数あるはずなのですが、、、

---------------------------------------------------------------ここから
lastrowno1 = Range("G65536").End(xlUp).Row
For m = 2 To lastrowno1
     Result = Application.VLookup(F & m, Columns("G"), 1, False)
    If IsError(Result) Then
     Range("H" & m).Value = "×"
    Else
     Range("H" & m).Value = Result
    End If
  
  Next m
--------------------------------------------------------------ここまで

大変申し訳有りませんが、よろしくお願いします。

【30760】Re:至急教えていただけませんか?【Vloo...
発言  Statis  - 05/11/4(金) 14:44 -

引用なし
パスワード
   こんにちは

>Result = Application.VLookup(F & m, Columns("G"), 1, False)
「F」はなんでしょうか?

【30761】Re:至急教えていただけませんか?【Vloo...
発言  かみちゃん  - 05/11/4(金) 14:46 -

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

>     Result = Application.VLookup(F & m, Columns("G"), 1, False)

F & m
は何ですか?変数Fがないように思います。
もしかして、F列のことを言っているのなら、
"F" & m
とすべきだと思います。

【30767】Re:至急教えていただけませんか?【Vloo...
質問  haramama  - 05/11/4(金) 15:22 -

引用なし
パスワード
   ▼かみちゃん さん

すみません、F列です。
"F"と修正しましたが、やはり全て×になってしまいます。
シート上で同じ内容で関数を入力とうまくいくのですが、、、
ちなみにデータはAccessからエクスポートしたもので
シングルクォーテーションがついています。
そのようなことが影響しているのでしょうか?

初心者ですみません・・

【30769】Re:至急教えていただけませんか?【Vloo...
回答  Statis  - 05/11/4(金) 15:26 -

引用なし
パスワード
   こんにちは

>Result = Application.VLookup(F & m, Columns("G"), 1, False)

Result = Application.VLookup(Range("F" & m).Value, Columns("G"), 1, False)

【30770】Re:至急教えていただけませんか?【Vloo...
回答  とまと  - 05/11/4(金) 15:32 -

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

"F" & m でなくて

 ↓ じゃないですか?

Range("F" & m).Value

【30771】Re:至急教えていただけませんか?【Vloo...
回答  とまと  - 05/11/4(金) 15:35 -

引用なし
パスワード
   Statisさん

かぶりました(^^A

【30773】Re:至急教えていただけませんか?【Vloo...
お礼  haramama  - 05/11/4(金) 15:38 -

引用なし
パスワード
   Statisさん、とまとさん

出来ました!!
涙が出るほど嬉しいです。

本当にありがとうございます。

【30774】Re:至急教えていただけませんか?【Vloo...
発言  かみちゃん  - 05/11/4(金) 15:39 -

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

>"F" & m でなくて
>
> ↓ じゃないですか?
>
>Range("F" & m).Value

「至急」というタイトルにあせって、正確にお伝えできませんでした。
すみませんでした。

【30780】Re:至急教えていただけませんか?【Vloo...
質問  haramama  - 05/11/4(金) 16:24 -

引用なし
パスワード
   ▼かみちゃん さん:
先程はありがとうございました。
本当に助かりました。

大変お詳しいようですので、以下の質問ですが
アドバイスいただけますでしょうか?
聞いてばかりでとても申し訳ないです・・

   A列    B列
1  abc  
2  def  
3      りんご
4  ghi  
5  klm  
6      ばなな
7  nop  
8  qrj  
9  stu 
10      みかん




上記のようにデータが表示されています。
実は、りんごの中の種類がabcとdefなのです。
同じく、ばななの種類がghiとklmです。
種類はB列のデータによって数が違いますので
りんごは2
ばななは2
みかんは3



となりますので、C列以降に表示したいと思います。
データが2万件くらいあるのと、その操作を
シート別に31回繰り返さなければいけないので
VBAを使ってカウントしていきたいと思っているのですが
なかなかいい案が浮かびません。
A列の3,6,10行目が空白なので、空白をキーワードにして
範囲を指定する方法を教えていただけると大変助かります。

【30781】Re:至急教えていただけませんか?【Vloo...
発言  かみちゃん E-MAIL  - 05/11/4(金) 16:40 -

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

>アドバイスいただけますでしょうか?

質問内容がよくわかりません。
A1セルから下方向に検索していき、空白セルになると、その行番号から前回の空白
セルの1行下のセルの行番号を引いた値を空白セルの2つ隣に記入するということ
でいいのでしょうか?

つまり、A1セルから下方向に検索して、最初の空白セルA3の行番号は、3、
前回の空白セルはなかったので、1とします。
3-1で2、その値をC3セルに記入する。
次にA3セルから下方向に検索して、次の空白セルA6の行番号は、6、
前回の空白セルA3の1行下のセルA4の行番号は、4、
6-4で2、その値をC6セルに記入する。

>データが2万件くらいあるのと、その操作を
>シート別に31回繰り返さなければいけないので

20000×31シート=620000行もあるのでしょうか?

>A列の3,6,10行目が空白なので、空白をキーワードにして
>範囲を指定する方法を教えていただけると大変助かります。

範囲を指定するというのは、どういうことでしょうか?
さきほどのご質問のVLOOKUPと何か関係があるのでしょうか?

もし、さきほどのご質問と関係ない別の質問であれば、別のスレッドを立てたほう
がよろしいかと思います。

【30785】Re:至急教えていただけませんか?【Vloo...
お礼  haramama  - 05/11/4(金) 17:23 -

引用なし
パスワード
   ▼かみちゃん さん:

わかりにくい質問で申し訳ありませんでした。
COUNT関数を使うにしてもどのようにして、
範囲を指定してよいのか分からず、質問
してしまいました。

例で言うと、みかん、ばなな、などの種類をC列に入れて
D列にその種類数(abcなどの個数)を入れたかったのです。

VLookと同じファイルなんですが、、、
かみちゃんさんの回答を元にして、自分で組み立ててみて、
できなければ、別トピを立てさせて頂きます。

本当にありがとうございました。

【30787】Re:至急教えていただけませんか?【Vloo...
回答  とまと  - 05/11/4(金) 18:06 -

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

とりあえず Activesheet だけですけど書いてみました。
試してみてください。
あとt みかん、ばなな、などの種類は8000種以上あることは
あるでしょうか?8000種以上あるとこの方法はだめかな。。


Sub test()

Dim t As Long
Dim m As Long
Dim buf As Variant


t = Columns("B").SpecialCells(2).Areas.Count

ReDim buf(1 To t, 1 To 2)
For Each c In Columns("B").SpecialCells(2)
  m = m + 1
  buf(m, 1) = c.Value
Next
m = 0
For Each c In Columns("B").SpecialCells(4).Areas
  m = m + 1
  buf(m, 2) = c.Count
Next

Range("C1").Resize(t, 2).Value = buf


End Sub

【30806】Re:至急教えていただけませんか?【Vloo...
お礼  haramama  - 05/11/4(金) 23:01 -

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

ありがとうございます!!
来週中ごろにはすべて仕上げなければならなかったので
大変助かりました。
月曜日に早速試してみたいと思いますので、またご報告
させて頂きます。

>あるでしょうか?8000種以上あるとこの方法はだめかな。。

あっても50種類くらいなので大丈夫だと思います。
本当に感謝しております。

早くアドバイス出来る側になれるように勉強したいと
思います。

【30807】Re:至急教えていただけませんか?【Vloo...
回答  こたつねこ  - 05/11/4(金) 23:22 -

引用なし
パスワード
   みなさんこんばんは
とまとさんが回答済みですが、違うパターンで

   A列    B列  C列
1  abc  
2  def  
3      りんご   2
4  ghi  
5  klm  
6      ばなな   2
7  nop  
8  qrj  
9  stu 
10      みかん  3

のような表になるVBAをひとつ

Sub test()
  Dim lngRow As Long
  Dim lngCNT As Long
  Dim i As Long
  
  With ActiveSheet
    lngRow = .Range("B65536").End(xlUp).Row
    
    For i = 1 To lngRow
      If .Cells(i, 1) = "" Then
        .Cells(i, 3) = lngCNT
        lngCNT = 0
      Else
        lngCNT = lngCNT + 1
      End If
    Next
  End With
End Sub

はずしてたら無視してください。^^;

【30864】Re:至急教えていただけませんか?【Vloo...
回答  とまと  - 05/11/6(日) 8:40 -

引用なし
パスワード
   おはようございます。

>>データが2万件くらいあるのと、その操作を
>>シート別に31回繰り返さなければいけないので

>20000×31シート=620000行もあるのでしょうか?

かみちゃんさんが質問されてる上記が気になるけど、
私のコードの複数シートに対応したものをアップします。
1 To Worksheets.Count は全シートとして
考えました。適宜変更してください。
最初の test がうまくいったら test2 を試してください。
今週はあまり質問箱見れないかもしれないです。
では。


Sub test2()

Dim t As Long
Dim m As Long
Dim c As Range
Dim i As Long
Dim buf As Variant

For i = 1 To Worksheets.Count '★適宜変更
 With Worksheets(i)
  On Error Resume Next
  t = .Columns("B").SpecialCells(2).Areas.Count
  ReDim buf(1 To t, 1 To 2)
    m = 0 '初期化
    For Each c In .Columns("B").SpecialCells(2)
      m = m + 1
      buf(m, 1) = c.Value
    Next
    m = 0 '初期化
    For Each c In .Columns("B").SpecialCells(4).Areas
      m = m + 1
      buf(m, 2) = c.Count
    Next
  .Range("C1").Resize(t, 2).Value = buf
  On Error GoTo 0
  End With
Next


End Sub

【30916】Re:至急教えていただけませんか?【Vloo...
お礼  haramama  - 05/11/7(月) 9:19 -

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

今朝、早速試してみましたところ、あっという間に
全シート処理できました。
すばらしい!!!

本当に本当にありがとうございました。

とまとさん、回答頂いたみなさんのように
いつなれるかは分かりませんが、近づける
ように勉強したいと思います。

取り急ぎ、お礼申し上げます。

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