• ベストアンサー

ExcelVBA セルのタイプ

お世話になります WindowsXPPro Excel2000なのですが 指定されたセルには値が入っているのか式が入ってるのか簡単に 判定することはできないでしょうか? activesheet.range("A1").formular1c1をみると値の場合そのまま値を拾ってきてしまい left(activesheet.range("E18").formular1c1,1,)="=" で判定するのはスマートではなかったので。 よろしくお願いします

質問者が選んだベストアンサー

  • ベストアンサー
  • merlionXX
  • ベストアンサー率48% (1930/4007)
回答No.1

Sub test() If Range("A1").Value = "" Then x = "空白" ElseIf Range("A1").HasFormula Then x = "数式" ElseIf IsNumeric(Range("A1").Value) Then x = "数値" Else x = "文字列" End If MsgBox x End Sub ではいかがでしょう?

forgedcode
質問者

お礼

merlionXX様 回答ありがとうございます .HasFormulaこのプロパティを探していました! ヘルプからプロパティ一覧をながめていたのですが・・・

関連するQ&A

  • ExcelVba 有効なセルかどうかを判定するには

    いつもお世話になります。 指定されたセルが有効なセルかどうかを判定したいのですが、何かよい方法がないかどうか質問させていただきました。 ユーザにrangeオブジェクトの引数を入力してもらう形なのですが、指定された値が例えば、aaa などの場合、Range("aaa")となり、当然これは無効なので、そのような指定はできませんよ、としたいのですが、これをエラーとしてハンドリングするのではなく、よい判定方法はないものでしょうか。 よろしくお願いします。

  • Excelでセル上の画像を別のセルにコピーするには

    いつも楽しく勉強させていただいております。 つぎのような処理をしたいのですが、うまくいきません。 1.セル1の上にある画像をセル2の上にコピーする。 2.コピーした画像をセル2の高さと幅にフィットさせる。 まず、このようなマクロを考えてみました。 Range("A1").CopyPicture Range("C1").Select ActiveSheet.Paste ActiveSheet.Shapes(Selection.Name).LockAspectRatio = msoFalse ActiveSheet.Shapes(Selection.Name).Top = Range("C1").Top ActiveSheet.Shapes(Selection.Name).Left = Range("C1").Left ActiveSheet.Shapes(Selection.Name).Height = Range("C1").Height ActiveSheet.Shapes(Selection.Name).Width = Range("C1").Width これですと元の画像がA1のセルより小さい場合、周囲に余白がある形でコピーされてしまいます。 C1にコピーしたら余白はなしでC1の大きさいっぱいに画像を引き延ばしたい(あるいは縮小したい)のです。 そこで次のように変更してみました。 (上のプログラムと一番上の行のみが違います)。 ActiveSheet.Shapes("図 6").Copy Range("C1").Select ActiveSheet.Paste ActiveSheet.Shapes(Selection.Name).LockAspectRatio = msoFalse ActiveSheet.Shapes(Selection.Name).Top = Range("C1").Top ActiveSheet.Shapes(Selection.Name).Left = Range("C1").Left ActiveSheet.Shapes(Selection.Name).Height = Range("C1").Height ActiveSheet.Shapes(Selection.Name).Width = Range("C1").Width これもうまくいきません。 A1にある元の"図 6"は動かしたくないのに、勝手にB1の位置に移動してしまいます。 というのは、"図 6"という画像をコピーすると、同じ名前で画像ができちゃうんですね。 コピー元とコピー先の両方の画像に対して位置や高さを設定することになるようです。 ということで、 1.セル1の上にある画像をセル2の上にコピーする。 2.コピーした画像をセル2の高さと幅にフィットさせる。 これを実現させるにはどうしたらいいでしょう。

  • LEFT RIGHT関数のことで教えてください

    いつもお世話になっております LEFT RIGHT関数のことで教えてください Private Sub Worksheet_Change(ByVal Target As Range)内のマクロで セルに式を書き込んでいます Range("D" & Target.Row).FormulaR1C1 = "=LEFT(RC[-1],5)" セルD16には機器名5と書いてあります この時 Range("D" & Target.Row).FormulaR1C1 = "=LEFT(RC[-1],5)" の5は、セルD16の機器名5の右から1文字目の5なのですが 式ではどう表現したらいいのでしょうか?

  • 指定したセルに番号をつけていくマクロ

    現在、画像をたくさん貼り付け、カタログを作っていて、番号を入れたらマクロで画像が配置されるというところまでできました。今度は、その、番号を指定したセルに書き込む作業をマクロでできないかと考えています。現在の私が作成したマクロが↓です。 Sub 画像1から60() Range("A4").Select ActiveCell.FormulaR1C1 = "1" Range("C4").Select ActiveCell.FormulaR1C1 = "2" Range("E4").Select ・・・   ActiveCell.FormulaR1C1 = "58" Range("q29").Select ActiveCell.FormulaR1C1 = "59" Range("s29").Select ActiveCell.FormulaR1C1 = "60" End Sub というふうにかなり長く、また、この番号が3000番くらいまであり、簡単にできないものかと試行錯誤しています。 初心者なりに、工夫したのは"600"と表記するのを"=60*10"とし、あとで*10を置換しています。それでも3000番はほど遠く何か方法がありましたら教えてください。

  • エクセルVBA セルの値を使ってのセル選択

    セルに入力した値でセル選択の範囲を指定したいです セルの値がxの時 セルB1~Cx と セルD100~Ex+100 を同時に選択したいのですが どうすれば良いのでしょう? セルA1に50と入力されているとします Range("B1:C50,D100:E150").Select となってほしい訳です Range や Cells とか調べたのですが分かりませんでした

  • ExcelのVBAのAutoFillの使い方について

    Excel97のマクロでAutoFillを使おうとしているのですが、エラーが出て実行できません。 何も表示されていないシートでコマンドボタンを押すと、AutoFillを使ってA1セル~E1セルとA2セル~E2セルに数字の1~5が表示されるようにしたいと考えています。 下記のようにマクロを書いたところ、A1~E5はうまくできたのですが、 「Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries」 の行でエラーが発生します。 「実行時エラー:1004 RangeクラスのAutoFillメソッドが失敗しました。」と表示されます。 Private Sub CommandButton1_Click()   ActiveSheet.Range("A1").Select   ActiveCell.FormulaR1C1 = "1"   Selection.AutoFill Destination:=ActiveCell.Range("A1:E1"), Type:=xlFillSeries   ActiveSheet.Range("A2").Select   ActiveCell.FormulaR1C1 = "1"   Selection.AutoFill Destination:=ActiveCell.Range("A2:E2"), Type:=xlFillSeries End Sub どなたかエラーの原因を教えていただけないでしょうか? よろしくお願いいたします。

  • マクロで名前をつけたセル範囲の平均値を求める

    Excel2000のマクロを使用しています。 まだまだ初心者なので、少し複雑になるとさっぱりです。 ぜひお力をお貸しください。 例) A1のセルに200、A2のセルに300、A3のセルに500のデータを持ち、 Range("A1":"A3")に "data"と名前を付けたとします。 ここでAVERAGE関数を使いたいのですが、 ActiveCell.FormulaR1C1 = "=AVERAGE("A1":"A3")"という方法ではなく "data"で参照して平均値を求めたいのですが、 ActiveCell.FormulaR1C1 = "=AVERAGE(data)としても参照してくれません。 この場合のいい解決法があったら教えてください。 よろしくお願いいたします。

  • ワークシート関数にVBAでセルを指定するには?

    FormulaR1C1ではなく Range形式でVBAでワークシート関数をセルにいれるコードを書くにはどうすればいいでしょう? Sub Macro() ActiveCell.FormulaR1C1 = "=LEN(RC[-1])" End Sub これを Sub Macro() ActiveCell.FormulaR1C1 = "=LEN(a1)" End Sub こうすると、 数式バーには、=LEN('a1')と入っており、 セルの値は#NAME? になります。 アポストロフィーが余計なのですがどうすれば取れますか?

  • ExcelVBAのRangeで複数指定

    Excel 2003 のVBAで質問です。 以下のサンプルプログラムですが、最後の MsgBox で 1 になってしまいます。 3 が帰ってくるようにするには、Range でどのように指定すればよいのでしょうか。 宜しくお願いします。 〔Sheetの値〕 ┌─┬─┬─┬─┐ │*│A│B│C│ ├─┼─┼─┼─┤ │1│11│12│13│ ├─┼─┼─┼─┤ │2│21│22│23│ ├─┼─┼─┼─┤ │3│31│32│33│ ├─┼─┼─┼─┤ │4│41│42│43│ ├─┼─┼─┼─┤ │5│51│52│53│ └─┴─┴─┴─┘ 〔サンプルプログラム〕 Dim myArray1, myArray2 As Variant myArray1 = ThisWorkbook.ActiveSheet.Range("A1:C5") myArray2 = ThisWorkbook.ActiveSheet.Range("A1:A5,B1:B5,C1:C5") '指定が間違ってる? MsgBox UBound(myArray1, 1) '結果 5 MsgBox UBound(myArray1, 2) '結果 3 MsgBox UBound(myArray2, 1) '結果 5 MsgBox UBound(myArray2, 2) '結果 1 → 3になって欲しい

  • VBA セル内改行+他セルの文字をカット&ペースト

    A1セル内文字の最後部分にカーソルを持っていって、Alt+Enterを押してA1セルを2行に改行する、 B1にある値をカットして、A1の改行した部分に貼り付け というマクロを作るべく、「マクロの記録」をしてみたところ、A1のテキストがそのままマクロに書き込まれてしまって応用ができないです。 改行部分に貼り付けするにはB1セルの値はコピーではなくカットが必要だと思いますが、これも「マクロの記録」だと動作ではなくテキストそのものが書き込まれてしまい、応用が効きません。 Sub A1改行カットペースト() ' ' A1改行カットペースト Macro ' ' ActiveCell.FormulaR1C1 = "RO20-001" & Chr(10) & "" Range("B1").Select ActiveCell.FormulaR1C1 = "" Range("A1").Select ActiveCell.FormulaR1C1 = "RO20-001" & Chr(10) & "8/7到着" Range("F4").Select End Sub "RO20-001"と"8/7到着"はA1とB1の値であって、この記述ではこのマクロをループさせた時、他の全部のセルに"RO20-001"と"8/7到着"が貼りついてしまいます。 改行やテキストのカット&ペーストの「動作」はどのように記述すれば良いのでしょうか? どなたかご存じの方がいらっしゃいましたら、教えて下さい。 よろしくお願いします。