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

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

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

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

Q&A

解決済

2回答

237閲覧

VBA セルB6~B300を参照し、内部データの右三文字を削除したい。

King_of_Flies

総合スコア382

VBA

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

0グッド

0クリップ

投稿2017/09/25 05:49

お疲れ様です。
Takkoです。

VBAで現在ツール作成をしています。

B6~B300には文字データがほかのbookからコピーされ下記のようなデータが入っています。

17/09/25(月)
17/09/26(火)
17/09/26(火)
17/09/26(火)
17/09/26(火)
17/09/26(火)
17/09/26(火)
17/09/27(水)
17/09/27(水)
17/09/27(水)
17/09/27(水)

これを17/09/27とし、セルの形式を日付型に変更して
2017/09/25
2017/09/26
2017/09/26
2017/09/26
2017/09/26
2017/09/26
2017/09/26
・・・・

と、なるようにしたいです。

実装したコードは下記のようになっていますが、
使い方の問題か、動作できていません。(マクロの実行でプロシージャをデバックするとエラーになります)

VBA

1Sub FormatEditor() 2 For i = 6 To 300 3 Debug.Print (Cells(2, 6).Value) 4 If Cells(2, i).Value.Length() > 0 Then 'この行でエラー 5 Cells(2, i).Value = Right(Cells(2, i).Value, 3) 6 Cells(2, i).Select 7 Selection.NumberFormatLocal = "yyyy/m/d;@" 8 End If 9 Next i 10End Sub

エラー内容
オブジェクトが必要です。

Cells(a,b).Valueで値が取れないようなので、
Debug.Print (Cells(2, 6).Value)を追加したのですが、
案の定取れていませんでした。

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

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

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

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

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

guest

回答2

0

ベストアンサー

けっこう、ボロボロです。
しょっぱなから、B列は、Cells(i, 2)ですよ。

VBA

1Sub FormatEditor() 2 For i = 6 To 300 3 If Len(Cells(i, 2).Value) > 0 Then 4 Cells(i, 2).NumberFormatLocal = "yyyy/m/d;@" 5 Cells(i, 2).Value = CDate("20" + Left(Cells(i, 2).Value, Len(Cells(i, 2).Value) - 3)) 6 End If 7 Next i 8End Sub

#追記

"("が始まってから三文字削除する。

"("があれば、"("以降を全て削除と言う事にします。

VBA

1 foo = Instr(Cells(i, 2).Value,"(") 2 If foo > 0 Then 3 bar = Left(Cells(i, 2).Value, foo-1) 4 Else ' "("が無かった 5 bar = Cells(i, 2).Value 6 End If 7 Cells(i, 2).Value = CDate("20" + bar)

投稿2017/09/25 06:53

編集2017/09/25 08:34
otn

総合スコア84423

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

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

King_of_Flies

2017/09/25 08:07

ありがとうございました。 デモができました。 ちなみに追加で質問ですが、 セルの右から三文字削除の処理を、 "("が始まってから三文字削除する。 という処理に変えるとしたらどのような記述が望ましいですか?
otn

2017/09/25 08:26

回答に追記します。
guest

0

Debug.Print (Cells(2, 6).Value)
これだとF2を参照しています
Debug.Print (Cells(2, 6).Address)
で確認してください。
今回の場合は
Range("B" & i)
の書き方の方がわかりやすいと思います

文字の長さは
Lenを使います
Cells(i, 2).Address
http://officetanaka.net/excel/vba/function/Len.htm

投稿2017/09/25 07:01

編集2017/09/25 07:03
date

総合スコア1820

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問