Excel VBA質問箱 IV

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

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


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

【33969】変数を使用するとエラーになる ちー 06/1/24(火) 14:01 質問[未読]
【33970】Re:変数を使用するとエラーになる やっちん 06/1/24(火) 14:10 発言[未読]
【33972】Re:変数を使用するとエラーになる ちー 06/1/24(火) 14:53 お礼[未読]
【33971】Re:変数を使用するとエラーになる Jaka 06/1/24(火) 14:29 回答[未読]
【33973】Re:変数を使用するとエラーになる ちー 06/1/24(火) 14:55 発言[未読]
【33974】Re:変数を使用するとエラーになる Jaka 06/1/24(火) 15:02 発言[未読]
【33977】Re:変数を使用するとエラーになる ちー 06/1/24(火) 15:25 発言[未読]
【33983】Re:変数を使用するとエラーになる Jaka 06/1/24(火) 15:56 発言[未読]
【33984】Re:変数を使用するとエラーになる inoue 06/1/24(火) 15:59 発言[未読]
【33987】Re:変数を使用するとエラーになる やっちん 06/1/24(火) 17:00 発言[未読]
【33990】Re:変数を使用するとエラーになる ちー 06/1/24(火) 18:02 お礼[未読]
【34023】Re:変数を使用するとエラーになる ちー 06/1/25(水) 9:33 お礼[未読]

【33969】変数を使用するとエラーになる
質問  ちー  - 06/1/24(火) 14:01 -

引用なし
パスワード
        A      B     C     D
1  社員名    データ    金額  検索社員名
2      ×◎◎◎××   ***   ■■
3      ▼▼▼▼×××  ***   ○○○○
4      ×××■■    ***   ◎◎◎
5                   ▼▼▼▼
6                   △△△△△


元のデータはB〜Cで、社員名別に金額をピボット集計したい。
B列には名前以外にも文字が含まれている為集計できない。(×は名前以外の文字)

なので、D列へ全社員名を入れてB列を検索し、
該当社員名が含まれている場合はA列へD列の該当データを入れるという式を作りました。

A2のセルへ「マクロの記録」にて
ActiveCell.FormulaR1C1 = "=IF(ISERROR(SEARCH(RC[3],RC[1]))=TRUE,0,RC[3])"

その式から、D2以下も検索させようと変数を使用してみたのですが上手くいきません。

Dim 検索行 As Integer, 行 As Integer
検索行 = 0
行 = 2
  Do Until Cells(行, 4) = vbNullString Or ActiveCell <> 0
  ActiveCell.FormulaR1C1 = "=IF(ISERROR(SEARCH(R[検索行]C[3],RC[1]))=TRUE,0,R[検索行]C[3])"
  If ActiveCell.Value = 0 Then
  End If
  行 = 行 + 1
  検索行 = 検索行 + 1
  Loop
End Sub

単に、数字と変数を入れ替えるだけでは駄目なのでしょうか?

加えて、上記はA2の結果しか出ないので、B列のデータがある限りA列へ結果を出すようにするには?

それと、R1C1ではなくCELLSを使いたいのですが、変え方がよくわかりません。
よろしくお願いします。


【33970】Re:変数を使用するとエラーになる
発言  やっちん  - 06/1/24(火) 14:10 -

引用なし
パスワード
   ▼ちー さん:
  = "=IF(ISERROR(SEARCH(R[検索行]C[3],RC[1]))=TRUE,0,R[検索行]C[3])"

文字列の一部に変数の値を入れたいときは一旦文字列を閉じる必要があります。
  = "=IF(ISERROR(SEARCH(R[" & 検索行 & "]C[3],RC[1]))=TRUE,0,R[" & 検索行 & "]C[3])"

【33971】Re:変数を使用するとエラーになる
回答  Jaka  - 06/1/24(火) 14:29 -

引用なし
パスワード
   MsgBox Cells(5, 1).Address(0, 0)
MsgBox Range("B5:E20").Address(0, 0, xlR1C1)
MsgBox Range("B5:E20").Address(, , xlR1C1)
MsgBox Range(Cells(2, 3), Cells(10, 5)).Address(0, 0)

【33972】Re:変数を使用するとエラーになる
お礼  ちー  - 06/1/24(火) 14:53 -

引用なし
パスワード
   やっちんさん、
どうもどうもありがとうございました<m(__)m>
VBAなんて全くわからずに、マクロの自動登録をちょちょっといじる程度なので
訳がわからず悩んでいました。
やっとスッキリできました!

【33973】Re:変数を使用するとエラーになる
発言  ちー  - 06/1/24(火) 14:55 -

引用なし
パスワード
   Jakaさん、これは何でしょう?

【33974】Re:変数を使用するとエラーになる
発言  Jaka  - 06/1/24(火) 15:02 -

引用なし
パスワード
   ▼ちー さん:
>Jakaさん、これは何でしょう?

>R1C1ではなくCELLSを使いたいのですが、
との事だったので、
Cells(〇,〇)のアドレスを
A1形式、もしくはR1C1形式に変換して、エクセル関数等に使えますよって事です。

【33977】Re:変数を使用するとエラーになる
発言  ちー  - 06/1/24(火) 15:25 -

引用なし
パスワード
   ▼Jaka さん:
ありがとうございました。意味がわからなくてすみません^_^;
毎度、質問の仕方が悪くて申し訳ないのですが、
cellsを使いたいというのは、

ActiveCell.FormulaR1C1 = "=IF(ISERROR(SEARCH(R[" & 検索行 & "]C[3],RC[1]))=TRUE,0,R[" & 検索行 & "]C[3])"

上記の式をRCではなく、cellsを使う式に直したいのです。
ActiveCell.Formula = "=IF(ISERROR(cells(" & 検索行 & ",4),cells(2,2))=TRUE,0,cells(" & 検索行 & ",4))"
みたいな・・・(エラーになりますが)。どうすれば良いですか?

【33983】Re:変数を使用するとエラーになる
発言  Jaka  - 06/1/24(火) 15:56 -

引用なし
パスワード
   >"=IF(ISERROR(cells(" & 検索行 & ",4),cells(2,2))=TRUE,0,cells(" & 検索行 & ",4))"
これだと、
"=IF(ISERROR(cells(" と
",4),cells(2,2))=TRUE,0,cells(" と
",4))"
が文字です。

変数と文字をつなげるには、変数と文字を別にしてつなげないといけません。
"123455文字列" & 変数 & "もじもじ文字" & 変数

で、セルのアドレスと文字をつなげるにも同じように別々にしてつなげないとダメです。
"=IF(ISERROR(" & cells(検索行 ,4).address(0,0) & ")=TRUE,0," & _
  cells(5,4).address(0,0) & ")"・・・・。

・cells(2,2)の意味がわからなかったので消しました。

例えば

For i = 1 To 10
  Cells(i, 1).Value = i
Next
'Forを抜けた時、iが11になっている事に注意
Cells(i, 1).Formula = "=Sum(" & Range(Cells(1, 1), Cells(i - 1, 1)).Address(0, 0) & ")"

【33984】Re:変数を使用するとエラーになる
発言  inoue E-MAILWEB  - 06/1/24(火) 15:59 -

引用なし
パスワード
   失礼します。

>ActiveCell.FormulaR1C1 = "=IF(ISERROR(SEARCH(R[" & 検索行 & "]C[3],RC[1]))=TRUE,0,R[" & 検索行 & "]C[3])"
相対参照なのにこんな式を書くととんでもないことになります。
ActiveCellが5行目だったら、SEARCHするのが10行目の値、
ActiveCellが10行目だったら、SEARCHするのが20行目の値、
になりますけれど。

>上記の式をRCではなく、cellsを使う式に直したいのです。
>ActiveCell.Formula = "=IF(ISERROR(cells(" & 検索行 & ",4),cells(2,2))=TRUE,0,cells(" & 検索行 & ",4))"
>みたいな・・・(エラーになりますが)。どうすれば良いですか?
貴方はマクロと関係なく計算式中に「cells(」と書くことがあるのですか?

【33987】Re:変数を使用するとエラーになる
発言  やっちん  - 06/1/24(火) 17:00 -

引用なし
パスワード
   ▼ちー さん:
>ActiveCell.Formula = "=IF(ISERROR(cells(" & 検索行 & ",4),cells(2,2))=TRUE,0,cells(" & 検索行 & ",4))"
>みたいな・・・(エラーになりますが)。どうすれば良いですか?
セルに手で入力するのとコードでセットするのかの違いだけで
式として成り立っていなければエラーになります。
セルに入れる式で他のセルを参照するときにcellsなんて使ってますか?

【33990】Re:変数を使用するとエラーになる
お礼  ちー  - 06/1/24(火) 18:02 -

引用なし
パスワード
   JaKaさん、inoueさん、やっちんさん、ありがとうございました。
なんとか出来上がりましたが、時間がないので
明日改めて投稿します。

【34023】Re:変数を使用するとエラーになる
お礼  ちー  - 06/1/25(水) 9:33 -

引用なし
パスワード
   JaKaさん、inoueさん、やっちんさん、おはようございます。

おかげさまで完成しました!!
 ↓
 ↓ R1C1の絶対参照を理解していなかったのでつまづいていました。
 ↓ これで時間のかかっていた集計が一瞬で終わります。
 ↓ お付き合い頂き、ありがとうございました<m(__)m>
 ↓
Dim 検索行 As Integer, データ行 As Integer

検索行 = 2
データ行 = 2

 Do Until Cells(データ行, 2) = vbNullString
  
  Do Until Cells(検索行, 4) = vbNullString Or Cells(データ行, 1) <> 0
  
  Cells(データ行, 1).FormulaR1C1 = "=IF(ISERROR(SEARCH(R" & 検索行 & "C4,R" & データ行 & "C2))=TRUE,0,R" & 検索行 & "C4)"
  If ActiveCell.Value = 0 Then
  
  End If
  検索行 = 検索行 + 1
  Loop
  
  検索行 = 2
  データ行 = データ行 + 1
 Loop
  
End Sub

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