Excel VBA 質問スレッド No.24 (解決済)

文字列の右から2番目に「.」を付けたい

投稿者 : まみこ     投稿日時 : 2017/04/18(Tue) 10:38:28     OS : Windows 7     EXCEL : Excel 2010
度々、すみません。
早速ですが、B列2行目から読み込んできた文字列(表示形式:文字列)が入っています

  B

 1200
 800
 1240
 8000
 2400
  ・
  ・
  ・

実は「円銭」ということでした。
そこでですが、右から2文字目に「.」を入力して

  B

 12.00
 8.00
 12.40
 80.00
 24.00
  ・
  ・
  ・

上記のような表示にしたいのですが、Right関数を使って試したのですが
思うようにいきませんでした。

Application.ScreenUpdating = False
pay = ActiveCell.Value

Do
ActiveCell.Value = Right(pay, 2) & "." ← どうするかがわかりません
ActiveCell.Offset(1, 0).Activate
pay = ActiveCell.Value
Loop While pay <> ""
Application.ScreenUpdating = True

ご教授のほど、よろしくお願いします。

[返信 1] Re : 文字列の右から2番目に「.」を付けたい
投稿者 : 管理人     投稿日時 : 2017/04/18(Tue) 21:32:59
■[質問] まみこさん(2017-04-18 10:38:28)の記事
> ActiveCell.Value = Right(pay, 2) & "." ← どうするかがわかりません


この行を↓のようにしてください。

> ActiveCell.Value = Left(pay, Len(pay) - 2) & "." & Right(pay, 2)


但し、pay が2文字未満だとエラーになりますので注意して使ってください。

[返信 2] Re : 文字列の右から2番目に「.」を付けたい
投稿者 : まみこ     投稿日時 : 2017/04/19(Wed) 14:01:28
■[返信 1] 管理人さん(2017-04-18 21:32:59)の記事
> ■[質問] まみこさん(2017-04-18 10:38:28)の記事
> > ActiveCell.Value = Right(pay, 2) & "." ← どうするかがわかりません


> この行を↓のようにしてください。

> > ActiveCell.Value = Left(pay, Len(pay) - 2) & "." & Right(pay, 2)


> 但し、pay が2文字未満だとエラーになりますので注意して使ってください。



管理人様
ご返信、ありがとうございました。

実行してみたところ、『実行時エラー '5': プロシージャの呼び出し、または
引数が不正です』とポップアップが出ました。

> 但し、pay が2文字未満だとエラーになりますので注意して使ってください

B列2行目に読み込まれたデータには「空白行」も含まれていました。
また、今回使用したデータはB2のデータが最初から「空白」となっていました。
確認不足でした済みません。

エラーになったのは、「空白行」が原因でしょうか?

[返信 3] Re : 文字列の右から2番目に「.」を付けたい
投稿者 : 管理人     投稿日時 : 2017/04/19(Wed) 21:19:00
おっしゃるとおり、エラーの原因は空白行が原因です。
空白行(pay = "")の場合は処理をする必要がないと思いますので、
If文で処理をスキップしてください。

[返信 4] Re : 文字列の右から2番目に「.」を付けたい
投稿者 : まみこ     投稿日時 : 2017/04/20(Thu) 08:58:53
■[返信 3] 管理人さん(2017-04-19 21:19:00)の記事
> おっしゃるとおり、エラーの原因は空白行が原因です。
> 空白行(pay = "")の場合は処理をする必要がないと思いますので、
> If文で処理をスキップしてください。

管理人様
ご回答、ありがとうございます。

大変、申し訳ありませんが

if(pay"","",ActiveCell.Value = Left(pay ~ など
いろいろとやってみたのですが

済みません、勉強不足でif分の入れどころがわかりません。

[返信 5] Re : 文字列の右から2番目に「.」を付けたい
投稿者 : 管理人     投稿日時 : 2017/04/21(Fri) 22:26:44
2文字以上の場合に処理を実行するようにif文を追加しました。
参考にしてみてください。

Sub test()

Application.ScreenUpdating = False

Dim pay As String
pay = ActiveCell.Value

Do
' 2文字以上の場合に変換処理を実施
If Len(pay) >= 2 Then
ActiveCell.Value = Left(pay, Len(pay) - 2) & "." & Right(pay, 2)
End If

ActiveCell.Offset(1, 0).Activate
pay = ActiveCell.Value

Loop While pay <> ""

Application.ScreenUpdating = True

End Sub

[返信 6] Re : 文字列の右から2番目に「.」を付けたい
投稿者 : まみこ     投稿日時 : 2017/04/24(Mon) 10:04:09
管理人様

度々の質問に対するご教示ありがとうございます。

前回、記載させて頂いた「最初の空白行」は飛ばして処理をしてくれるのですが
次に出てくる空白行以降は処理をせずに終了してしまいました。

>Loop While pay <> ""

上記の文がいけないのでしょうか?

今までのデータを見返してみたところ、結構空白行が多かったです。

何度も質問を繰り返してしまい、すみません。

[返信 7] Re : 文字列の右から2番目に「.」を付けたい
投稿者 : 管理人     投稿日時 : 2017/04/25(Tue) 23:18:11
すみません。途中に空白行を含むことをすっかり忘れていました。
空白行を含む場合はEndプロパティで最終行を取得します。
その最終行を超えるかどうかをループの終わりで判定すればうまくいきます。

Sub test2()

Application.ScreenUpdating = False

Dim pay As String
pay = ActiveCell.Value

' 最終行を取得
Dim lastRow As Long
lastRow = Cells(Rows.Count, ActiveCell.Column).End(xlUp).Row

Do
' 2文字以上の場合に変換処理を実施
If Len(pay) >= 2 Then
ActiveCell.Value = Left(pay, Len(pay) - 2) & "." & Right(pay, 2)
End If

ActiveCell.Offset(1, 0).Activate
pay = ActiveCell.Value

' 最終行を超えるまでループ
Loop While ActiveCell.Row <= lastRow

Application.ScreenUpdating = True

End Sub

[返信 8] Re : 文字列の右から2番目に「.」を付けたい
投稿者 : まみこ     投稿日時 : 2017/04/26(Wed) 11:51:13
管理人様

今回もいろいろとご教授、ありがとうございました。
空白セルも問題なく処理をすることができました。

分からないがゆえに「丸投げ」のようなこともあり、すみませんでした。

まだ、キチンと理解するには時間がかかると思いますが、がんばります。

また、機会がありましたらよろしくお願いします。

スポンサード リンク
 
 
当掲示板について
返信入力フォーム
お 名 前  :
内  容   :
ステータス  : この質問を解決済みにする

認証コード  :
        キャプチャ画像


( 処理日時 : 2019-08-26 09:44:46 )

Page
Top