質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

Q&A

3回答

2222閲覧

VBAで文字列の貼り付けが上手くいきません(追記有り)

Hattrem

総合スコア4

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

コピー

元のオブジェクトを破壊することなく、オブジェクトの複製を生成することをコピーと呼びます。

マクロ

定義された処理手続きに応じて、どのような一連の処理を行うのかを特定させるルールをマクロと呼びます。

0グッド

1クリップ

投稿2020/01/31 00:45

編集2020/01/31 02:10

前提・実現したいこと

VBA初心者です、どうぞよろしくお願いします。
Excel2016のマクロで
2020年○月×日(月) →(月)形式の曜日を削除 →別のセルに文字列(例:43832 等のシリアル値)で貼り付け
を実現したいです。

コメントありがとうございます、追記です。
コピー元のセルの値は文字列です。手動で曜日を消すとセルの書式設定の通り日付表示(値貼り付けをしたらシリアル値)になります。

発生している問題・エラーメッセージ

日付のシリアル値ではなく、「2020年○月×日」の文字列でコピーされてしまいます。

該当のソースコード

VBA

1Range("B604").Select 2 Range(Selection, Selection.End(xlDown)).Select 3 Selection.Replace What:="(月)", Replacement:="", LookAt:=xlPart, _ 4 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 5 ReplaceFormat:=False 6 Selection.Replace What:="(火)", Replacement:="", LookAt:=xlPart, _ 7 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 8 ReplaceFormat:=False 9 Selection.Replace What:="(水)", Replacement:="", LookAt:=xlPart, _ 10 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 11 ReplaceFormat:=False 12 Selection.Replace What:="(木)", Replacement:="", LookAt:=xlPart, _ 13 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 14 ReplaceFormat:=False 15 Selection.Replace What:="(金)", Replacement:="", LookAt:=xlPart, _ 16 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 17 ReplaceFormat:=False 18 Selection.Replace What:="(土)", Replacement:="", LookAt:=xlPart, _ 19 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 20 ReplaceFormat:=False 21 Selection.Replace What:="(日)", Replacement:="", LookAt:=xlPart, _ 22 SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ 23 ReplaceFormat:=False 24 Selection.Copy 25 Range("D7").Select 26 Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ 27 :=False, Transpose:=False 28

試したこと

コピー前のセル →セルの書式を日付
コピー後のセル →セルの書式を文字列
に変更し、手動でやると上手くいくのですが、マクロにすると上の問題が起きてしまいます。

補足情報(FW/ツールのバージョンなど)

特になし

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/01/31 01:10

「4から始まる5桁の数字」の変換ルールがわかりません。仕様を書かないと。
ttyp03

2020/01/31 01:12

それからコピー元のセルの値はシリアル値でしょうか?文字列でしょうか?
Hattrem

2020/01/31 02:11

お返事ありがとうございます。質問頂いた点を修正しました。 コピー元のセルの値は文字列です。
guest

回答3

0

先走って回答しておきます。
元データがシリアル値か文字列かで処理方法が異なります。

VBA

1' シリアル値の場合 2Range("D7").Value = Range("B604").Value2 3 4' 文字列の場合 5ymd = Left(Range("B604").Value, InStr(Range("B604").Value, "(") - 1) 6Range("D7").Value = CLng(DateSerial(Year(ymd), Month(ymd), Day(ymd)))

投稿2020/01/31 01:28

編集2020/01/31 01:29
ttyp03

総合スコア16998

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/01/31 02:18

元データは文字列とのことで、後者の方でお試しください。
Hattrem

2020/01/31 02:20

早速ご回答頂きありがとうございます! こちらの修正箇所は Range("B604") Range("D7") の2カ所(.Select)の前を置き換える形で合っておりますでしょうか? シリアル値のコードも含め色々試してみたのですが、入れている位置が間違っているのか、やはり日付の表示は治らないままです。何度も申し訳ないです…。
ttyp03

2020/01/31 02:33

> の2カ所(.Select)の前を置き換える形で合っておりますでしょうか? この意味がよくわかりませんが、提示したコードで丸っと置き換えてもらえればいいです。
ttyp03

2020/01/31 04:08

なんか他の回答のコメントを見ると伝わっていなそうなので再度。 今あるコードを以下に置き換えるだけでOKです。 ymd = Left(Range("B604").Value, InStr(Range("B604").Value, "(") - 1) Range("D7").Value = CLng(DateSerial(Year(ymd), Month(ymd), Day(ymd))) B604セルをシリアル値に変換したものをD7セルに代入します。 あ、B604セルから曜日も削除しないといけないのでしょうか。 それならばもう一行最後に追加してください。 Range("B604").Value = ymd
Hattrem

2020/01/31 09:21

とても丁寧に教えて頂きありがとうございます。 頂いたアドバイスをもとに修正かけてみます!
guest

0

あ、D列へ転記でしたか。。。。

ExcelVBA

1Sub Macro1() 2 With Range(Range("B604"), Cells(Rows.Count, "B").End(xlUp)).Offset(, 2) 3 .Formula = "=DATEVALUE(LEFT(B604,FIND(""("",B604)-1))" 4 .Value = .Value 5 .NumberFormatLocal = "yyyy年m月d日" 6 End With 7End Sub

ExcelVBA

1Sub Macro2() 2 With Range(Range("B604"), Cells(Rows.Count, "B").End(xlUp)) 3 .NumberFormatLocal = "G/標準" 4 .Replace What:="(*", Replacement:="" 5 .Copy .Offset(, 2) 6 .NumberFormatLocal = "yyyy""年""m""月""d""日""(aaa)" 7 End With 8End Sub

ああああああ?
昼寝してて気づいた。。。。。。。
「文字列で」でしたか^^;

ExcelVBA

1Sub Macro1() 2 With Range(Range("B604"), Cells(Rows.Count, "B").End(xlUp)).Offset(, 2) 3 .Formula = "=""'""&DATEVALUE(LEFT(B1,FIND(""("",B1)-1))" 4 .Value = .Value 5 End With 6End Sub

ExcelVBA

1Sub Macro2() 2 Dim rngFrom As Range 3 Dim rngTo As Range 4 5 Set rngFrom = Range(Range("B604"), Cells(Rows.Count, "B").End(xlUp)) 6 Set rngTo = rngFrom.Offset(, 2) 7 8 With rngFrom 9 .NumberFormatLocal = "G/標準" 10 .Replace What:="(*", Replacement:="" 11 .NumberFormatLocal = "yyyy""年""m""月""d""日""(aaa)" 12 End With 13 14 With rngTo 15 rngFrom.Copy .Cells 16 .NumberFormatLocal = "@" 17 End With 18End Sub

括弧から後ろを消すなら、
月、火、水・・・・
と繰り返さずに
(*
としたら、1回で全部消えますよ。

投稿2020/01/31 00:56

編集2020/01/31 04:59
mattuwan

総合スコア2136

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Hattrem

2020/01/31 02:37

早速のご回答ありがとうございます! 頂いたSubを追記してみたのですが、やはり上手くいきませんでした…。 ```Excel VBA Sub ボタン用() ' ' ボタン用 Macro ' オリジナルID作るためのマクロ ' ' Range("E604:F607").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.NumberFormatLocal = "0_ " Range("B604").Select Range(Selection, Selection.End(xlDown)).Select Selection.Replace What:="(月)", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="(火)", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="(水)", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="(木)", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="(金)", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="(土)", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Replace What:="(日)", Replacement:="", LookAt:=xlPart, _ SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _ ReplaceFormat:=False Selection.Copy Range("D7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("E604:F607").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy Range("E7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False Range("D604").Select Range(Selection, Selection.End(xlDown)).Select Application.CutCopyMode = False Selection.Copy Range("C7").Select Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End Sub Sub Macro1() With Range(Range("B604"), Cells(Rows.Count, "B").End(xlUp)).Offset(, 2) .Formula = "=DATEVALUE(LEFT(B604,FIND(""("",B604)-1))" .Value = .Value .NumberFormatLocal = "yyyy年m月d日" End With End Sub ```
mattuwan

2020/01/31 02:41

上手く行かない。ではわかりません。 元の値と結果を貼り付けてください。
Hattrem

2020/01/31 09:24

元の値 →2020年1月12日(日) 結果 →2020年1月12日 となっておりました。 上の回答の追記拝見しました、詳しく書いて頂きありがとうございます。 皆さまに頂いたアドバイスをもとに修正かけてみます!
guest

0

コピー元の日付を "2020年01月01日(水)" のように必ず数字部分が8桁になるようにすれば、以下のコードでできます。(選択範囲に条件などは加えていないのであしからず。)

VBA

1Sub MoveDate() 2 Dim delRng As Range, copRng As Range, delRngVal As String 3 Set delRng = Application.InputBox("コピー元のセルを選択", "選択", Type:=8) 4 delRngVal = Left(delRng.Value, 4) & Mid(delRng.Value, 6, 2) & Mid(delRng.Value, 9, 2) 5 Set copRng = Application.InputBox("コピー先のセルを選択", "選択", Type:=8) 6 delRng.Value = "" 7 copRng.Value = delRngVal 8End Sub 9

投稿2020/01/31 04:00

Dr4goniez

総合スコア12

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ttyp03

2020/01/31 04:08

これで得られるのはシリアル値ではないのでは?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問