【iOS版アプリ】不具合のお知らせ

ブックを開いた時に検索をかけて複数あった場合、指定のセルに転機させたいのですがずれてしまいます。
私の知識ではこれが限界です。ごちゃごちゃなんですがわかりますでしょうか。

Dim r As Long
Set ws = Worksheets(Range("C2") & Range("D2"))
Set mybd = ws.Range("C:C")
keyWord = Worksheets("Sheet1").Range("M4").Value + 1

Set myObj = mybd.find(keyWord, LookAt:=xlPart)
r = myObj.Row

Sheets("Sheet1").Range("D5").Value = ws.Range("E" & r).Value
Dim myRange1 As Range
Dim myObj1 As Range
Dim keyWord1 As String

Set myRange1 = Worksheets(Range("C2") & Range("D2")).Range("E:E")
keyWord1 = Worksheets("Sheet1").Range("D5")
Set myObj1 = myRange1.find(keyWord1, LookAt:=xlPart)

If myObj1 Is Nothing Then
Worksheets("Sheet1").Range("A1").Value = "ありません"
Exit Sub
End If

Dim msg As String
Dim myCell1 As Range
Set myCell1 = myObj1
i = 6
j = 7
d = 11


Do
i = i + 11
Worksheets("Sheet1").Cells(i, "D").Value = ws.Cells(myCell1.Row + 1, "E").Value

j = j + 11
Worksheets("Sheet1").Cells(j, "D").Value = ws.Cells(myCell1.Row, "A").Value

d = d + 11
Worksheets("Sheet1").Cells(d, "D").Value = ws.Cells(myCell1.Row, "I").Value

d = d + 11
Worksheets("Sheet1").Cells(d, "E").Value = ws.Cells(myCell1.Row, "J").Value


Set myCell1 = myRange1.FindNext(myCell1)


Loop While myCell1.Row <> myObj1.Row

Sheet1のD5,D17,D29,D41にはWorksheets(Range("C2") & Range("D2"))のE列のものを
Sheet1のA6,A18,A30,A42にはWorksheets(Range("C2") & Range("D2"))のA列のものを
Sheet1のD10,D22,D34,D46にはWorksheets(Range("C2") & Range("D2"))のI列のものを
Sheet1のE10,E22,E34,E46にはWorksheets(Range("C2") & Range("D2"))のJ列のものを
シート1の46行目以降は転記させたくないのですが、表記されてしまいます。

Worksheets(Range("C2") & Range("D2"))のE列には日付が入り同じものでE,A,I,Jは異なることもあれば同じものもあります。同じ場合はシート1にそれぞれ転記するものは同じでいいです。

どのようにすればいいでしょうか?

質問者からの補足コメント

  • 内容がごちゃごちゃなんで整理する為、一旦締め切ります。回答くださった方ありがとうございました。

      補足日時:2021/03/20 21:06
gooドクター

A 回答 (7件)

No4です。



>Sheet1のE10,E22,E34,E46にはWorksheets(Range("C2") &
>Range("D2"))のJ列の同じ行のものを転記したいです
「同じ行」って、以下の各セルの値ってことでしょうか?
 J10、J22、J34、J46
もしそうであるなら、前半の keyWord 云々は一体なんなんでしょうかね?

No4でもお断りしましたように、シートの構成も不明だし、何をしたいのかも不明なので、到底、適切な回答はできそうにありません。
ですので、かろうじて理解可能な「46行以降」に関してのみ、お答えした次第です。
(No5様が、具体的に全部を展開してくださっています)
    • good
    • 0
この回答へのお礼

すみませんスマホから投稿です。
別件の仕事が入りパソコン閉じてしまい正確なアドレスがわからない為、本日はお答えできなくなりました。後日改めてお答えさせて頂きます。申し訳ありません。

お礼日時:2021/03/18 19:20

No.3です。



d = d + 11
Worksheets("Sheet1").Cells(d, "D").Value = ws.Cells(myCell1.Row, "I").Value

d = d + 11 ' ★
Worksheets("Sheet1").Cells(d, "E").Value = ws.Cells(myCell1.Row, "J").Value

こうなっているとD列の行数とE列の行数は d = d + 11 ' ★ によりずれませんかね?
    • good
    • 0
この回答へのお礼

ありがとうございます。
d = d + 11 ' ★ こちらのものは削除しました。ご指摘ありがとうございます。

お礼日時:2021/03/18 19:05

「46行目以降を転記しない」ということであれば、


以下のようにしてください。
Doループの個所のみ記述します。

Do
i = i + 11
If i < 46 Then
Worksheets("Sheet1").Cells(i, "D").Value = ws.Cells(myCell1.row + 1, "E").Value
End If
j = j + 11
If j < 46 Then
Worksheets("Sheet1").Cells(j, "D").Value = ws.Cells(myCell1.row, "A").Value
End If
d = d + 11
If d < 46 Then
Worksheets("Sheet1").Cells(d, "D").Value = ws.Cells(myCell1.row, "I").Value
End If
d = d + 11
If d < 46 Then
Worksheets("Sheet1").Cells(d, "E").Value = ws.Cells(myCell1.row, "J").Value
End If

Set myCell1 = myRange1.FindNext(myCell1)


Loop While myCell1.row <> myObj1.row
    • good
    • 0
この回答へのお礼

大変にありがとうございます。
46行目以降に転記されるのは解消されました。

お礼日時:2021/03/18 17:41

こんにちは



何をしたいのかさっぱりわかりませんけれど、ご提示のもので目的が達成できていて、
>シート1の46行目以降は転記させたくないのですが、表記されてしまいます。
だけが問題ということでしょうか?


>Sheet1のD5,D17,D29,D41には~~E列のものを
変数 i によって制御される出力行を追ってみれば、17、28、39、50…となるけれど、説明文とは全く違っているし…
(すでに、No3様がご指摘済みのようですが)

とにかく、「46行目以降には出力しない」ということだけを考えればよいのなら、出力する際に「46行目以降なら出力しない」としておけば実現できるでしょう。
例えば、変数 i に関して言うならば、現状の出力部分を
 If i<46 Then 「出力処理(=セルへの記入)」
のようにしておくことで、少なくとも「46行目以降への記入」はされなくなります。
(他の行番号の変数も同様)


その他に関しては、何をなさりたいのかわからないので、なんと言えません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
46行目以降の表記されるのは最終的には解決したいです。印刷したいんですが、そちらは印刷範囲ではないんでいいんですがなんとかしたいです。
コードは無茶苦茶ですみません。どうしたらいいかわからず追記していって今に至ります。わかりづらくてすみません。
Sheet1のD5,D17,D29,D41にはWorksheets(Range("C2") & Range("D2"))のE列の同じ行のものを
Sheet1のA6,A18,A30,A42にはWorksheets(Range("C2") & Range("D2"))のA列の同じ行のものを
Sheet1のD10,D22,D34,D46にはWorksheets(Range("C2") & Range("D2"))のI列の同じ行のものを
Sheet1のE10,E22,E34,E46にはWorksheets(Range("C2") & Range("D2"))のJ列の同じ行のものを
転記したいです。

お礼日時:2021/03/18 17:35

d = d + 11 がループ内に2つあるのは狙っての事?


-------
i = 6
j = 7
d = 11
-------
ここも初期値が違うようですし、+ 11 ではなく +12 のようにも思えますが?
    • good
    • 0
この回答へのお礼

ありがとうございます。
+12にしてみたんですが、39行目からずれてしまいます。数字を変えてみてはいるんですがうまくいきません。むずかしいです。

お礼日時:2021/03/18 15:50

日付の検索は大変ですしね。



http://officetanaka.net/excel/vba/tips/tips131b. …

>Loop While myCell1.Row <> myObj1.Row

.Row よりは .Address (セル番地)の方がより明確な気もしますけど?
ちょっと質問の意味が不明なので回答も不適切かも知れません。
    • good
    • 0
この回答へのお礼

ありがとうございます。
セル試してみます。

お礼日時:2021/03/18 15:48

あなたのコードをちゃんとは読んでませんが、とりあえず、ループ内に「iが46以上になったらループを抜ける」みたいな一文を入れれば、期

待どおりの動作になりませんか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
Doの中に
If =46 And j = 46 And d = 46 Then
Exit Do
End If
を足して
For k = 50 To 100
Sheet1.Cells(k, "D:E") = ""
Next
を最後につけてみたんですがだめでした。

お礼日時:2021/03/18 15:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング