アプリ版:「スタンプのみでお礼する」機能のリリースについて

マクロ初心者です。
Excelでセル内の一部のみ同じセルを検索し、そのセルと同じ行で任意の列のセルを選択させ、別ファイルにコピペする方法がわかりません。
いま下記のコードで実行しても、任意の列のセルを選択できない状態です。

データ①のB28のセルに「2021/12/11 10:00」と書かれており、そのセルを分割させ、C28に「10:00」と記載させています。データ②では1時間ごとのデータが記載されており、データ①のC28と同じ表記にするために元々A3に「1」………A26に「24」という表記を無理やり時刻のデータに変更させています。また。データ①からデータ②にコピペし、検索しているのですができません。

自分が行っているやり方はおそらく効率が悪いやり方だと思います。
ご教示いただけると幸いです。
よろしくお願いいたします。


Windows("データ①").Activate
Range("C28").Value = Split(Range("B28").Text, " ")(1)

Windows("データ②").Activate
Range("A3").Select
ActiveCell.FormulaR1C1 = "1:00"
Range("A3").Select
Selection.NumberFormatLocal = "h:mm;@"
Selection.AutoFill Destination:=Range("A3:A26"), Type:=xlFillDefault
Range("A3:A26").Select

Windows("ERD20211211.csv").Activate
Range("C28").Select
Selection.Copy
Windows("DMD20211211.csv").Activate
Range("B33").Select
ActiveSheet.Paste

Dim txt As Variant
Dim rng As Range

txt = ActiveCell.Value

Set rng = Sheets("DMD20211211").Range("A3:A26").Find(What:=txt)
If rng Is Nothing Then
MsgBox "見つかりませんでした。"
Else
Cells(rng.Row, "G").Select

Application.CutCopyMode = False
Selection.Copy
Windows("データ③").Activate
Range("BL17").Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

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

  • 本文では、データ①のB28のセルに「2021/12/11 10:00」と書きましたが、「2021/12/11 10:30」の場合もあります。(30分単位)
    10:30の場合は10:00と同じデータ②のA列の「10」の行のG列を選択するようにしたいです。
    なので、xx:00とxx:30の2つの場合で、A列の「xx」の行のG列を選択するためにはどのようなコードにすればよろしいでしょうか。
    ご教示いただけると幸いです。

      補足日時:2021/12/17 12:19
  • また、本文では時刻の表記で「10:00」で検索していますが、「10:30」の場合はデータ②が1時間ごとのデータとなるため、検索しても見つからない状態です。
    そのため、10:00や10:30の「10」のみを分割、抽出し、「10」で検索すれば対応できるのではないかと考えています。
    10:00や10:30の「10」のみを分割、抽出する方法をご教示いただけると幸いです。

      補足日時:2021/12/17 12:32

A 回答 (2件)

こんにちは



>10:00や10:30の「10」のみを分割、抽出する方法をご教示いただけると幸いです。
これに付いての回答です。

前回、Range("C28").Value = Split(Range("B28").Text, " ")(1) で
半角スペースを区切り文字で 10:00 を抽出するコードを教えてもらってたと思いますが、、
(シリアルでなくテキストベース)
このコードを応用すれば良いと思いますが、意味を理解できていないと言う事でしょうか。

テキストベースと言う事がはっきりしているのなら
この Range("C28").Value の値を : 区切りで取得すれば
10が得られると思います
= Split(Range("C28").Text, ":")(0)

B28からいきなりなら
( 'シリアルの可能性があるなら書式設定は文字列にしてください)

Range("C28") = Split(Split(Range("B28").Text, " ")(1), ":")(0)

10:00 からなら 文字からであれば、
Split("10:00", ":")(0) *半角、全角を確かめて

文字の操作で取得するなら(一例)
= Left(Mid(Range("B28").Text, InStr(Range("B28").Text, " ") + 1), InStr(Mid(Range("B28").Text, InStr(Range("B28").Text, " ") + 1), ":") - 1)

半角スペースと半角コロンの間の文字列です
    • good
    • 0
この回答へのお礼

ご回答ありがとうございます。
参考にさせていただきます。

申し訳ありませんが、意味を理解してません。

教えていただいた下記コードの最後の文字「(0)」はどういう意味でしょうか。(前回教えていただいたコードの最後「(1)」も)
= Split(Range("C28").Text, ":")(0)

また、かなり効率は悪いですが、下記コードで無理やり完成させました。
TextやValueのところは理解できていないので、これもご教示いただけると幸いです。
Range("C28").Value = Split(Range("B28").Value, " ")(1)
Range("D28").Value = Split(Range("C28").Text, ":00:00")
Range("D28").Value = Split(Range("D28").Text, ":30:00")

お礼日時:2021/12/17 14:15

データが一致していないという事を疑ってみましょう。



「10:00」という表示が実は、
「2021/12/11 10:00」かもしれませんし、
「2021/12/17 10:00」かもしれません。
    • good
    • 0

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