Excel VBA質問箱 IV

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

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


4891 / 13646 ツリー ←次へ | 前へ→

【53771】書式について ゆう 08/2/6(水) 19:18 質問[未読]
【53773】Re:書式について ゆう 08/2/6(水) 19:35 質問[未読]
【53774】Re:書式について ハチ 08/2/6(水) 19:39 回答[未読]
【53775】Re:書式について ゆう 08/2/6(水) 19:46 発言[未読]
【53777】Re:書式について ハチ 08/2/6(水) 20:32 発言[未読]
【53784】Re:書式について VBWASURETA 08/2/7(木) 10:33 発言[未読]
【53787】Re:書式について ハチ 08/2/7(木) 11:27 発言[未読]
【53786】Re:書式について Jaka 08/2/7(木) 11:04 発言[未読]
【53788】追加 Jaka 08/2/7(木) 11:51 発言[未読]

【53771】書式について
質問  ゆう  - 08/2/6(水) 19:18 -

引用なし
パスワード
   よろしくお願いします。

Excel:Microsoft Excel 2002
OS:WindowsXP

あるセルの書式が「文字列」に指定されています。
このセルに「1」と入力すると、文字列として1が入ります。
そこでこのセルを入力モード(F2)にしてそのままEnterを押すと自動でセルの書式が数値型に変わります。

この状況をVBAを使って自動化する事は可能でしょうか?
つまり、セルに入力された内容を自動で判別して書式を変えたいです。

言葉足らずで申し訳ありません。
どなたかよろしくお願いします。

【53773】Re:書式について
質問  ゆう  - 08/2/6(水) 19:35 -

引用なし
パスワード
   すいません、書き方が悪かったようなので修正します。

「セルに入力された値の書式を取得する事はできるか?」

と言う事です。セル自身の書式ではなく、値の書式を知ることが出来ればと思います。

よろしくお願いします。

【53774】Re:書式について
回答  ハチ  - 08/2/6(水) 19:39 -

引用なし
パスワード
   ▼ゆう さん:
>すいません、書き方が悪かったようなので修正します。
>
>「セルに入力された値の書式を取得する事はできるか?」
>
>と言う事です。セル自身の書式ではなく、値の書式を知ることが出来ればと思います。
>
>よろしくお願いします。

ちょっと意味が掴みかねますが、
こういうことですか?


Sub Test()
  Dim v As Variant
  
  v = ActiveCell.Value
  MsgBox TypeName(v)
  
End Sub

【53775】Re:書式について
発言  ゆう  - 08/2/6(水) 19:46 -

引用なし
パスワード
   ▼ハチ さん:
早速の返事有難うございます!

>ちょっと意味が掴みかねますが、
すみません…
上手く表現できませんでした…

>  MsgBox TypeName(v)
今試してみましたが、対象セルの書式が文字列型になっていると「1」と入力した場合も「String」と表示されてしまうようです…
ここで「Double」などの数値型が表示されると目的を果たせます。
可能でしょうか?

【53777】Re:書式について
発言  ハチ  - 08/2/6(水) 20:32 -

引用なし
パスワード
   ▼ゆう さん:
>▼ハチ さん:
>早速の返事有難うございます!
>
>>ちょっと意味が掴みかねますが、
>すみません…
>上手く表現できませんでした…
>
>>  MsgBox TypeName(v)
>今試してみましたが、対象セルの書式が文字列型になっていると「1」と入力した場合も「String」と表示されてしまうようです…
>ここで「Double」などの数値型が表示されると目的を果たせます。
>可能でしょうか?

手動でセルの書式を『文字列』とした場合は、
うまくいったのですが、VBAでやるとダメですね。
なぜなのかは・・・わかりません。

数値だけなら IsNumeric で判定できると思いますが、
あまり良い回答ではありませんね。

他の識者をお待ちください

【53784】Re:書式について
発言  VBWASURETA  - 08/2/7(木) 10:33 -

引用なし
パスワード
   ▼ハチ さん、ゆう さん:
こんにちは。

多分、数値だけの話で、文字書式になっていると全角の「1」を入れても
数字にならないということだけではないでしょうか?
ハチ さんの案で以下の感じだけでいけそうですよ。

Dim m_StrAddress As String

'編集変化がある場合に発生するイベント
Private Sub Worksheet_Change(ByVal Target As Range)
  With ActiveSheet.Range(m_StrAddress)
    If .NumberFormatLocal = "@" And IsNumeric(.Value) Then
      'キープしたアドレスから書式変更
      .NumberFormatLocal = "G/標準"
    End If
  End With
End Sub

'カーソルが移動しただけでも発生するイベント
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
  m_StrAddress = Target.Address  'とりあえずアドレスキープ
End Sub

【53786】Re:書式について
発言  Jaka  - 08/2/7(木) 11:04 -

引用なし
パスワード
   ▼ゆう さん:
>Excel:Microsoft Excel 2002
>OS:WindowsXP
>
>あるセルの書式が「文字列」に指定されています。
>このセルに「1」と入力すると、文字列として1が入ります。
>そこでこのセルを入力モード(F2)にしてそのままEnterを押すと自動でセルの書式が数値型に変わります。

Win2000ですが、変わりません。
B1セルに
=ISTEXT(A1)
を書いて確認されてみては....。

同じような現象が起きないのでなんともいえませんが、勘違いされているような気がします。
この入力とは手動?

書式が標準で1を入力(1は数値)後、書式を文字列にしても数値のままで
文字にならない。
そのセルを一旦編集状態にしてエンタを押すと文字列になるなら解りますが。
※一旦編集状態にしてエンタを押す(内容は同じでも)
これはエクセルが書き換えたと認識しているようです。

【53787】Re:書式について
発言  ハチ  - 08/2/7(木) 11:27 -

引用なし
パスワード
   >手動でセルの書式を『文字列』とした場合は、
>うまくいったのですが、VBAでやるとダメですね

これも検証が甘かったです・・・

Jakaさんが書かれているのが正しいと思います。
(自分もExcel2000)
書式が文字列のセルに入力された 1 は文字列になりますね。

新規WorkSheetでSample → Test と実行してみてください。
この2つのデータの違いを判別する方法は、
自分にはわかりません。

接頭辞が付いてるのかと思ったのですが、
.PrefixCharacterで見ても判別できません。

VBWASURETAさんのコードを参考にしてください。

Sub Sample()
  With ActiveSheet
    .Range("A1:B1").NumberFormatLocal = "@"
    .Range("A1").Value = 1
    .Range("B1").Value = "1"
  End With
End Sub

Sub Test()
  Dim v1 As Variant
  Dim v2 As Variant
  
  With ActiveSheet
    v1 = .Range("A1").Value
    v2 = .Range("B1").Value
  End With
  MsgBox "A1:" & TypeName(v1)
  MsgBox "B2:" & TypeName(v2)
End Sub

【53788】追加
発言  Jaka  - 08/2/7(木) 11:51 -

引用なし
パスワード
   >書式が標準で1を入力(1は数値)後、書式を文字列にしても数値のままで
>文字にならない。
>そのセルを一旦編集状態にしてエンタを押すと文字列になるなら解りますが。
>※一旦編集状態にしてエンタを押す(内容は同じでも)
>これはエクセルが書き換えたと認識しているようです。

因みにこの文字になった数字は、表示形式が文字列のままでも数値に変換できます。
セル、または列を選択して、
データ → 区切り位置 → そのまま完了
また、この数値になったセルを編集したと認識させると、文字列になります。
(編集状態にしてEntか別のセル選択等、数式バーでも可。)

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