range.value = range.value (数式→値)でエラーが発生する

Anonymous
2021-09-07T02:15:22+00:00

特定のシートで数式を全て値に置き換える為に

Range.UsedRange.Value = Range.UsedRange.Value

としているのですが

エラー:1004が発生します。

原因となっているセルを特定しましたが

区切り文字列として

========

の様に=から始まる文字列がセルに入っていました。

※特定のセルを仮にO13としたときに

cells("O13").Value = cells("O13").Value

でも同様のエラーが発生することを確認。

数式に使用する「=」を区切りに使用するのもいかがな物かと思いますが

文字列として入っている以上

上記コードが動作しても良いのではと思います。

ちなみに文字列が

'========

でも発生します。

=を使用しなければ良いのですが

データは別で作成され受け取る立場ですので

できれば何か回避する方法があればと思っています。

またこれはVBAのバグでしょうか?

ご存知の方居られましたら教えて頂けませんでしょうか?

開発者テクノロジ | Visual Basic for Applications

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません
質問作成者が受け入れた回答
Anonymous
2021-09-10T10:04:36+00:00

> 原因となっているセルを特定しましたが> 区切り文字列として> ========> の様に=から始まる文字列がセルに入っていました。

・"="から始まる文字列(≠数式)が格納されている
 全てのセルの表示形式を「文字列」にしてから代入する。

--------------------------------------------------------------

Dim ws As Worksheet
Dim rngFound As Range
Dim strFirstAddress As String

Set ws = ActiveSheet

With ws.UsedRange
    Set rngFound = .Find(What:="=*", After:=.Cells(1, 1), _
                         LookIn:=xlValues, LookAt:=xlPart, _
                         SearchOrder:=xlByRows, SearchDirection:=xlNext, _
                         MatchCase:=True, SearchFormat:=False)
    If Not rngFound Is Nothing Then
        strFirstAddress = rngFound.Address
        Do
            rngFound.NumberFormat = "@"
            Set rngFound = .FindNext(rngFound)
        Loop Until rngFound.Address = strFirstAddress
    End If
    .Value = .Value
End With

Set rngFound = Nothing
Set ws = Nothing

--------------------------------------------------------------

・単純に「値の貼り付け」を実行する。

--------------------------------------------------------------

Dim ws As Worksheet

Set ws = ActiveSheet

ws.UsedRange.Copy
ws.UsedRange.PasteSpecial xlPasteValues
Application.CutCopyMode = False

Set ws = Nothing

--------------------------------------------------------------

以上のいずれかでよいのではないかと。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません
質問作成者が受け入れた回答
Makapu 92,630 評価のポイント ボランティア モデレーター
2021-09-08T22:29:16+00:00

WesNishimuraさん、こんにちは。

"========"は区切り文字として扱っているという事ですので、これ自体は値として格納しなくて良いのですよね。

セルに"==*"の文字列が入っていたら、Replace関数 などを使用して別の文字列(空白など)に変換するといった処理を事前に行ったらどうでしょうか。

また、VBA に関するご質問ですと、以下の専用のフォーラムの方が回答が集まり易いと思いますので、ご利用になってみて下さいね。

◆Msdn フォーラム - Visual Basic for Application(VBA) (microsoft.com)

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

1 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2021-09-22T01:45:30+00:00

    ・単純に「値の貼り付け」を実行する。

    --------------------------------------------------------------
    
    Dim ws As Worksheet
    
    Set ws = ActiveSheet
    
    ws.UsedRange.Copy
    ws.UsedRange.PasteSpecial xlPasteValues
    Application.CutCopyMode = False
    
    Set ws = Nothing
    
    
    --------------------------------------------------------------
    

    以上のいずれかでよいのではないかと。

    こちらで解決いたしました。

    ws.UsedRange.Valueが正常に機能していなかったので

    値の貼り付けを試そうとしていませんでした。

    大変ありがとうございました。

    「====」が一部の関数で数式として取り扱われてしまっていると言う問題は残りますが・・・

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません