Excel VBA質問箱 IV

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

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


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

【29548】エクセル表の検索ができません・・・。 G 05/10/7(金) 12:52 質問[未読]
【29549】Re:エクセル表の検索ができません・・・。 ちくたく 05/10/7(金) 13:03 発言[未読]
【29551】Re:エクセル表の検索ができません・・・。 ponpon 05/10/7(金) 13:05 発言[未読]
【29553】Re:エクセル表の検索ができません・・・。 G 05/10/7(金) 13:26 質問[未読]
【29555】追記 G 05/10/7(金) 13:53 質問[未読]
【29556】Re:追記 ちくたく 05/10/7(金) 14:25 発言[未読]
【29558】Re:追記 G 05/10/7(金) 15:51 発言[未読]
【29559】Re:追記 ちくたく 05/10/7(金) 16:22 回答[未読]
【29679】Re:追記 G 05/10/11(火) 17:45 お礼[未読]

【29548】エクセル表の検索ができません・・・。
質問  G  - 05/10/7(金) 12:52 -

引用なし
パスワード
   始めまして。質問なのですが・・・。

今、エクセルのVBAを利用して以下のようなイメージの表から
行名と列名を検索し、交差するセルの座標をとりだして、
そこに別Sheetから値を持ってきて
自動的に入力するようなマクロを作ろうとしているのですが

検索処理がうまく行かずこまっています。



    個人情報1 個人情報2 個人情報3 ・・・ 個人情報100
 人名   

 人名

 人名


行と列の名前を取り出すところまではうまく行っているのですが
取り出した行、列名をそれぞれColmunsやRowで座標を取り出そうと
しているのですが、なかなかうまく行きません。

もし、方法等ご存知の方いましたらご教授御願いします。

【29549】Re:エクセル表の検索ができません・・・。
発言  ちくたく  - 05/10/7(金) 13:03 -

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

どこがうまくいかないのかがわかりませんが、
例えば、

Sub test()

  MsgBox ActiveCell.Row
  MsgBox ActiveCell.Column
  MsgBox ActiveCell.Address

End Sub

アクティブなセルの行とか列とか、そのセルのアドレスとかは、
これでわかります。

差し障りなければ、既存のコードを呈示して頂けたら、
ねらいがわかるかもしれません。

【29551】Re:エクセル表の検索ができません・・・。
発言  ponpon  - 05/10/7(金) 13:05 -

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

>行と列の名前を取り出すところまではうまく行っているのですが
うまくいっている所までのコードをアップして、
その後どうしたいのか、具体的な説明を付け加えると、
レスがつきやすいと思います。

【29553】Re:エクセル表の検索ができません・・・。
質問  G  - 05/10/7(金) 13:26 -

引用なし
パスワード
   >ちくたくさん ponponさん jakaさん
レスありがとうございます。
コードは今このような感じになってます。


'変数宣言

Dim user As String
Dim group As String
Dim countu As Integer
Dim countg As Integer
Dim rpcountu As Integer
Dim rpcountg As Integer

'初期値代入処理

countu = 1
countg = 1
harugyou = 0
haruretu = 0

user = ""

group = Cells(countg, 2)

'検索処理ループ


Do Until user = "EOF"

'ユーザ名検索処理(別Sheetより検索対象ユーザ名(列)を取り出す処理)
  
user = Cells(countu, 1)

'モジュールテスト用出力
  
  Cells(countu, 3) = user
  user = Cells(countu, 1)
  countu = countu + 1
  
'グループ選択処理(別Sheetより検索対象グループ(行)を取り出す処理)
Do Until group = ""

group = Cells(countg, 2)
  group = Cells(countg, 2)
  countg = countg + 1

'↑ここまで旨く行っています。
'↓ここからが方法が分からない場所です

'検索処理(ユーザ名とグループ名からデータ入力座標を求める)

Set zahyoc = Columns(6).Find(user)←ここで列の要素を取り出してます
Set zahyor = Rows(6).Find(group)←ここで行の要素を取り出してます

'Range("f7:f267").Select←ここで要素から列の座標をとりだそうとしています。
'Set harugyou = Column(zahyoc)
'Range("c6:co6").Select←ここで要素から行の座標を取り出そうとしています。
'Set haruretu = Rows(zahyor.Row)


'Cells(haruretu, harugyou).Value = ""
←ここで座標を指定してデータを入力します
(※未だ此方は方法をいろいろと検討中です)

Loop

Loop


インターネットや書籍で調べながらちまちま作っているレベルなので
余計なコード等あるかもしれませんが、
ユーザとそのユーザが所属するグループ一覧からユーザ名と所属するグループ
名を検索し、チェックシート(前回の書き込みのイメージ)の
ユーザ名とグループ名がクロスする場所にチェックを入れることを目的とした
ものです。

よろしく御願いします。

【29555】追記
質問  G  - 05/10/7(金) 13:53 -

引用なし
パスワード
   つまずいているポイントを書いていませんでした(汗)

躓いているポイントは

1.要素から座標を検索する処理でどうしても正確な値が帰ってこない
(先頭行を持ってきている模様?、例:本来(列6行10と帰ってこなければ
いけないですが列6行6と帰ってきてしまう等)

2.値を別のデータ一覧から入力する処理が旨く行かない。

です。よろしく御願いします。

【29556】Re:追記
発言  ちくたく  - 05/10/7(金) 14:25 -

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

すいません、ちょっと目的が見えにくかったので。
確認のためですが、下のようなことをしたいのでしょうか?

Sub test()
  Dim yourName As String, pData As String
  Dim allName As Variant, allPData As Variant
  Dim i As Integer, j As Long
  
  yourName = InputBox("人命を入力してください。")
  pData = InputBox("個人情報を入力してください。")
  
  allName = Rows(1)
  allPData = Columns(1)
  
  For i = 1 To UBound(allName, 2)
    If allName(1, i) = yourName Then Exit For
  Next i
  
  For j = 1 To UBound(allPData, 1)
    If allPData(j, 1) = pData Then Exit For
  Next j
  
  Cells(j, i).Value = "そこに値が入力される。"
  
End Sub

【29558】Re:追記
発言  G  - 05/10/7(金) 15:51 -

引用なし
パスワード
   ちくたくさん>レスありがとうございます。
引用ですみませんが、返信します。


▼ちくたく さん:
>こんにちは。
>
>すいません、ちょっと目的が見えにくかったので。
>確認のためですが、下のようなことをしたいのでしょうか?
>
>Sub test()
>  Dim yourName As String, pData As String
>  Dim allName As Variant, allPData As Variant
>  Dim i As Integer, j As Long
>  
>  yourName = InputBox("人命を入力してください。")
>  pData = InputBox("個人情報を入力してください。")
  ’→検索対象のデータは入力では無く、別sheetに既に一覧
    として在るものから入力をしようとしています。


>  allName = Rows(1)
>  allPData = Columns(1)
>  
>  For i = 1 To UBound(allName, 2)
>    If allName(1, i) = yourName Then Exit For
>  Next i

>  For j = 1 To UBound(allPData, 1)
>    If allPData(j, 1) = pData Then Exit For
>  Next j
>  
>  Cells(j, i).Value = "そこに値が入力される。"
>  
>End Sub
→なるほど、検索列、行の先頭をRowsやcolumnsで格納して(たとえば6列目、6行目スタートだと【Row(6)】【columns(6)】と記述すればOKですね?

それで検索対象の文字列が入った変数と、列、行の文字列とつき合わせて一致しなければForでまわして、一致すればForを抜けて、cellsへ値を入力すればいいんですか。

とても参考になります。ありがとうございました。

後、不明な点がもう1点あるのですが

Cells(j, i).Value = "そこに値が入力される。"

この文の【そこに値が入力される。】の部分なんですが
また別の表を検索してデータを入れようと思っているのですが
可能でしょうか?

【データを取り出す表】

ユーザ名 個人情報

ユーザ名 個人情報1
     個人情報2
       ・
       ・
     個人情報100
(スペース)(スペース)
ユーザ名2 個人情報1
       ・
       ・
     個人情報100 

【29559】Re:追記
回答  ちくたく  - 05/10/7(金) 16:22 -

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

こんにちは。

>>  yourName = InputBox("人命を入力してください。")
>>  pData = InputBox("個人情報を入力してください。")
>  ’→検索対象のデータは入力では無く、別sheetに既に一覧
>    として在るものから入力をしようとしています。

わかりました。

>>  allName = Rows(1)
>>  allPData = Columns(1)

>→なるほど、検索列、行の先頭をRowsやcolumnsで格納して(たとえば6列目、6行目スタートだと【Row(6)】【columns(6)】と記述すればOKですね?

うーん、配列を使っているんで、こんな書き方をしています。
単純に、rows(6)とかして、F8キーで確かめて頂くのが、
理解が早いかと。あくまで、目的確認のためのコードなので。

>それで検索対象の文字列が入った変数と、列、行の文字列とつき合わせて一致しなければForでまわして、一致すればForを抜けて、cellsへ値を入力すればいいんですか。

直接セルの値とつきあわせているわけではないですが。
まぁ、似たようなことをしています。

>Cells(j, i).Value = "そこに値が入力される。"

>この文の【そこに値が入力される。】の部分なんですが
>また別の表を検索してデータを入れようと思っているのですが
>可能でしょうか?

可能です。

【29679】Re:追記
お礼  G  - 05/10/11(火) 17:45 -

引用なし
パスワード
   >ちくたく さん

どうもありがとうございます。無事解決いたしました。
また分からないことにぶつかりましたらお世話になりにきます〜

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