Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


1869 / 13645 ツリー ←次へ | 前へ→

【71184】実行エラー はてな 12/2/6(月) 22:26 質問[未読]
【71186】Re:実行エラー ちん 12/2/7(火) 10:42 発言[未読]
【71188】Re:実行エラー ちんさんのファン 12/2/7(火) 11:23 質問[未読]
【71191】Re:実行エラー ちん 12/2/7(火) 16:00 発言[未読]
【71376】Re:実行エラー vbawasureta_vol2 12/2/26(日) 5:06 発言[未読]
【71189】実効エラー はてな 12/2/7(火) 12:16 質問[未読]
【71197】Re:実効エラー n 12/2/8(水) 0:24 発言[未読]
【71245】Re:実効エラー はてな 12/2/14(火) 15:11 お礼[未読]
【71246】Re:実効エラー n 12/2/14(火) 17:45 発言[未読]
【71377】Re:実効エラー vbawasureta_vol2 12/2/26(日) 5:22 発言[未読]
【71378】Re:実効エラー n 12/2/26(日) 12:06 発言[未読]
【71199】Re:実効エラー ちん 12/2/8(水) 16:02 発言[未読]

【71184】実行エラー
質問  はてな  - 12/2/6(月) 22:26 -

引用なし
パスワード
   sub 空白削除()
With ActiveSheet.UsedRange
 .Formula = Application.trim(.Formula)
End With
end sub

sub 全角の英数カナを半角へ()
With ActiveSheet.UsedRange
  .Formula = Application.Asc(.Formula)
End With
end sub

以下のコードを実行するとたまに実行エラー13となります。

なぜ?

理由がわかりません。
windows xp pro
sp3

excel 2000

以上の環境設定

誰がおわかりでしたら教えて下さい。

【71186】Re:実行エラー
発言  ちん  - 12/2/7(火) 10:42 -

引用なし
パスワード
   ▼はてな さん:こんにちわ、ちんといいます。
わたくしがよく使用する命令としては、
1.Ltrim ・・・ 左側スペース除去
2.Rtrim ・・・ 右側スペース除去
3.Strconv ・・・ 文字変換 
です。

Sub 空白削除()

  ActiveCell.Value = RTrim(LTrim(ActiveCell.Value))
  
End Sub

Sub 全角の英数カナを半角へ()

  ActiveCell.Value = StrConv(ActiveCell.Value, vbNarrow)
End Sub

以上、参考までに・・・

【71188】Re:実行エラー
質問  ちんさんのファン  - 12/2/7(火) 11:23 -

引用なし
パスワード
   ▼ちん さん:こんにちは。

横から失礼します。

>わたくしがよく使用する命令としては、
>1.Ltrim ・・・ 左側スペース除去
>2.Rtrim ・・・ 右側スペース除去
>3.Strconv ・・・ 文字変換 
>です。
>
>Sub 空白削除()
>
>  ActiveCell.Value = RTrim(LTrim(ActiveCell.Value))
>  
>End Sub
>

RTrim(LTrim(ActiveCell.Value))



Trim(ActiveCell.Value)

の違いはなんでしょうか?

きっと、ちんさんのことだから
何かあると思うのですが。

【71189】実効エラー
質問  はてな  - 12/2/7(火) 12:16 -

引用なし
パスワード
   お返事ありがとうございます。
そもそも実効エラーがでる原因が知りたいのですが。

それと私のコードと皆さんの提示しているコードの違いがわかりません。
よろしくお願いします。

*ちなみに私の提示したコードで実行エラー13が出るのは稀なのですが。

>sub 空白削除()
> With ActiveSheet.UsedRange
> .Formula = Application.trim(.Formula)
> End With
>end sub
>
>sub 全角の英数カナを半角へ()
> With ActiveSheet.UsedRange
>  .Formula = Application.Asc(.Formula)
> End With
>end sub
>
>以下のコードを実行するとたまに実行エラー13となります。
>
>なぜ?
>
>理由がわかりません。
>windows xp pro
>sp3
>
>excel 2000
>
>以上の環境設定
>
>誰がおわかりでしたら教えて下さい。

【71191】Re:実行エラー
発言  ちん  - 12/2/7(火) 16:00 -

引用なし
パスワード
   こんにちは、ちんといいます。

>横から失礼します。
>
>>わたくしがよく使用する命令としては、
>>1.Ltrim ・・・ 左側スペース除去
>>2.Rtrim ・・・ 右側スペース除去
>>3.Strconv ・・・ 文字変換 
>>です。
>>
>>Sub 空白削除()
>>
>>  ActiveCell.Value = RTrim(LTrim(ActiveCell.Value))
>>  
>>End Sub
>>
>
>RTrim(LTrim(ActiveCell.Value))
>
>と
>
>Trim(ActiveCell.Value)
>
>の違いはなんでしょうか?
>
>きっと、ちんさんのことだから
>何かあると思うのですが。

同じ命令ですね。私が、Trimを存じてませんでした。
勉強になりました。

私の場合、LtrimとRtrimとStrconvを使用する目的としては、
オフコンからのデータのUP/DOWN対策で使用していたので、参考までに。

以上、参考までに・・・

【71197】Re:実効エラー
発言  n  - 12/2/8(水) 0:24 -

引用なし
パスワード
   >以下のコードを実行するとたまに実行エラー13となります。
>
>なぜ?

Excel2000の場合、
VBAでワークシート関数を使う場合の配列要素数に限界があります。
5,461個までです。
これを超えると エラーコード 13 の型不一致エラーになります。

『たまに』なるのは、処理するUsedRangeのセル範囲数が限界値を超えた時だけ
起こるからです。

敢えてFormulaプロパティを使う必要がなければ、回避策はあります。
With ActiveSheet.UsedRange
  .Value = Application.Trim(.Cells)
  .Value = Application.Asc(.Cells)
End With
TrimやAsc関数の引数に配列を与えず、セル範囲を与える事で回避します。
『FormulaプロパティではなくValueプロパティで良ければ』ですが。

>それと私のコードと皆さんの提示しているコードの違いがわかりません。
貴方のコードは配列、あるいは複数セル範囲をまとめて処理する事に対応するため
Applicationクラスのワークシート関数を使っています。

他回答で提示されたコードは単独文字列を処理するために
VBA関数が使われたものです。
配列などに対応するにはLoop処理が必要です。

目的に応じて『違い』があるわけですから
参考 にされれば良いのではないでしょうか。

【71199】Re:実効エラー
発言  ちん  - 12/2/8(水) 16:02 -

引用なし
パスワード
   ▼はてな さん:こんにちわ、ちんといいます。
全然見当違いしてました。失礼しました。
セル上の値が、きちんと表示されていないのではないでしょうか?

セルの幅がせまいため、#表示になっているとか・・・
もしくは、#DIV/0! 、 #VLUE! などのエラーが表示されていると、
「型が一致しません」などのエラーが表示されるとあります。

以上、参考までに・・・

【71245】Re:実効エラー
お礼  はてな  - 12/2/14(火) 15:11 -

引用なし
パスワード
   皆様ありがとうございます。

>敢えてFormulaプロパティを使う必要がなければ、回避策はあります。
>With ActiveSheet.UsedRange
>  .Value = Application.Trim(.Cells)
>  .Value = Application.Asc(.Cells)
>End With
>TrimやAsc関数の引数に配列を与えず、セル範囲を与える事で回避します。
>『FormulaプロパティではなくValueプロパティで良ければ』ですが。


しかし、この部分がイマイチわかりません。
With ActiveSheet.UsedRange
>  .Value = Application.Trim(.value)
>  .Value = Application.Asc(.value)
>End With

なぜ.cellsにするのか。
.valueという書き方にしないのか。
もう1つは、配列を与えずにという言葉。
.formulaは配列を与えていることになるの?

【71246】Re:実効エラー
発言  n  - 12/2/14(火) 17:45 -

引用なし
パスワード
   TRIMなどのワークシート関数は、引数として
=TRIM(" A ")
と、直値を渡す事もできるし、
=TRIM(A1)
と、セル参照を渡す事もできます。
= Application.Trim(.Formula)や
= Application.Trim(.Value)は、この直値を渡しているようなものです。

Sub Test()
  With Range("A1:A2")
    Debug.Print "Value", fTest(.Value)
    Debug.Print "Formula", fTest(.Formula)
    Debug.Print "Cells", fTest(.Cells)
  End With
End Sub

Function fTest(x) As String
  fTest = TypeName(x)
End Function

>なぜ.cellsにするのか。
引数としてセル参照を渡すためです。
上記例で言うと
Debug.Print fTest(Range("A1:A2"))

>.valueという書き方にしないのか。
Valueだと配列を渡す事になります。

>.formulaは配列を与えていることになるの?
はい。引数として配列を渡して(与えて)います。

【71376】Re:実行エラー
発言  vbawasureta_vol2  - 12/2/26(日) 5:06 -

引用なし
パスワード
   ちょっとお邪魔します。
最近はないと思いますが追加情報です。

Trim関数は古いExcelバージョンだとランタイムエラーになる場合があります。
そいう場合はOfficeのアップデートすることで改善した覚えがありますが
最近のバージョンであれば大丈夫と思います。

【71377】Re:実効エラー
発言  vbawasureta_vol2  - 12/2/26(日) 5:22 -

引用なし
パスワード
   こんばんは。

回答されているみたいですけど
一応プロパティの追加情報です。


>なぜ.cellsにするのか。
>.valueという書き方にしないのか。

valueプロパティには型が決まってたりします。
内容をあまり見ていないので間違っているかもしれませんが
間違った指定をしたりすると型のエラーになります。
以下はvalueプロパティの参考URLです。

arrow3.way-nifty.com/shige/2004/08/excelvba_range.html

【71378】Re:実効エラー
発言  n  - 12/2/26(日) 12:06 -

引用なし
パスワード
   単純に
関数に引数を渡す話で(複数セル.Value)は配列になるというだけなんですけど。
Sub try()
  With Sheets.Add.Range("a1:a3")
    .Value = [{1;"";"a"}]
    MsgBox "a1: " & TypeName(.Item(1).Value)
    MsgBox "a2: " & TypeName(.Item(2).Value)
    MsgBox "a3: " & TypeName(.Item(3).Value)
    MsgBox "value: " & TypeName(.Value)
    MsgBox "cells: " & TypeName(.Cells)
  End With
End Sub
WorksheetFunctionの中身でどういう処理がされているかまでは解りませんが
=TRIM(" A ")
=TRIM(A1)
=TRIM(A1:A3)
少なくとも何でも受けれるようにVariant型になっているのでしょう。
そこで
.. = Application.Trim(.Value)
この場合、TRIM関数には配列Variant()が渡り
.. = Application.Trim(.Cells)
これはセル範囲Rangeが渡ります。

>Excel2000の場合、
>VBAでワークシート関数を使う場合..
『配列Variant()が渡り』の時には
その要素数に5,461個までという仕様上の制限があり、
セル範囲Range型を渡すと回避できる場合がある、という事です。

1869 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free