• ベストアンサー

セルが何行なのかをVBAで取得したい

セルが何行なのかをVBAで取得したいのですが どういうコードにすればいいですか? 例えば、A1セルに a b c と入ってる場合、3行ですが それをVBAで取得するにはどうすればいいですか? Sub test() Dim r As Range Set r = Cells(1, 1) If r.Value Like "*" & Chr(10) & "*" Then MsgBox "改行があります" End If End Sub というコードで改行が有ることは取得できたのですが 何行かまでは取得する方法がわかりません。

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

  • ベストアンサー
  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.3

ワークシート関数でも同じ方法で計算できますが、 sub macro1()  dim buf as variant  buf = range("A1").value  msgbox len(buf) - len(replace(buf, vblf, "")) + 1 & "行です" end sub のような考え方でもできます。

その他の回答 (2)

  • kamikami30
  • ベストアンサー率24% (812/3335)
回答No.2

まず、正しくは セル内に何行の文字列が入っているか? です。 行数と聞いて私がまず思い付いたのは、改行コードの数を数えること。 ここまでは質問者さんと同じです。 ここでさらに、私は以下のパターンがあることを考えました。 改行を便宜上↓と書きます。 どのパターンも見た目には3行です。 パターン1 a↓ b↓ c パターン2 a↓ b↓ c↓ パターン3 a↓ b↓ c↓ ↓ パターン4 ↓ a↓ b↓ c パターン5 ↓ a↓ b↓ c↓ ↓ スペースのみの行がある場合の判断基準なども考慮すべきですがらとりあえず、この辺でよしとします。 上記のパターンでは、見事に改行の個数が違うわけです。 この全てのパターンを共通の書式とするには、文字列の前後にある改行を取り除くと良いと考えました。 そうすると、各行の間に改行があることになるので、改行の個数は常に行数マイナス1ですね。 あとは説明するまでもないと思います。

igjxtfbidh
質問者

お礼

ありがとうございます。

  • t-aka
  • ベストアンサー率36% (114/314)
回答No.1

例えばこんな感じではどうでしょうか・・・。 Dim r As Range Set r = Cells(1, 1) Dim splitCell() As String splitCell() = Split(r, Chr(&HA)) MsgBox "行数は " & UBound(splitCell) + 1 & "です"

igjxtfbidh
質問者

お礼

ありがとうございます。

関連するQ&A

  • 【VBA】「同じ文字を含むセルがあるならば」とやりたい

    こんばんは。 エクセル2003を使用しています。 例えば A1→「りんご」 A2→「りんご食べたい」 の場合、 「りんご」は2個以上あります としたいのですがうまくいきません。 Sub 重複() For 行 = 1 To Cells(65536, 1).End(xlUp).Row If Cells.Find(what:=Range("a" & 行), LookAt:=xlPart) Is Nothing Then Else 'あるならば MsgBox Range("a" & 行) & "は2個以上あります" End If Next End Sub これだと取得セルもカウントされてしまうため、必ずMsgBoxが表示されてしまいます。 どうすれば取得セル意外にも取得セルを含むセルがあるかを調べられるのでしょうか? そしてこれは A1→「りんご」 A2→「りんご食べたい」 A3→「みかん」 A4→「みかんはオレンジ」 A5→「バナナ」 ・ ・ ・ と続いており 最終的には →「りんご食べたい」 →「みかんはオレンジ」 →「バナナ」 にしたいのです。 よろしくお願いします。

  • 【VBA】改行されたセルの条件

    VBAにてA1のセルが画像のように改行されたセルであっても条件式で処理を行うようにしたいのですがうまくできません。 ↓式のように作成はしてみました どうしたら改行されたセルでも処理が行えるのでしょうか? Sub test() If Range("A1") = (行1行2の場合) Then 処理 End If End Sub

  • エクセルVBAにて最終行の取得とその活用

    エクセルVBA初心者です。 VBAで入力行最終行を取得するのは、色々なところに載っているですが、 その行から一個下の行を全て消すのはどうしたらよいのですか? Sub 最終行取得() Dim r r = Range("B4").End(xlDown) Rows(r + 2).ClearContents  ←ここは適当です。 ちなみに Range("a"&r+1).ClearContents で一つしたのセルを消す事は出来ました。

  • VBA 選択された離れたセルの値の取得について

    EXCELのVBAでどうしても前に進めず困っております。 目的としているコードは、離れたセル(複数)をあらかじめCtrlキーで選択状態にしておき、選択されたセルの値のみをVBAが別のセルに並べていくというものです。 以下が私の作ったコードなのですが、思ったとおりの動作をしてくれません。 VBA初心者なもので、おかしな記述がたくさんあると思うのですが、どなたかアドバイスお願いします。 Public Sub xx() Dim SelectArea As String Dim TargetCell As Range Dim a As Integer Dim Row As Integer Dim Column As Integer Dim CNT1 As Integer a = 0 Row = 0 Column = 0 For CNT1 = 1 To 10 Row = Row + 1 SelectArea = Selection.Address Set TargetCell = Range("B3").Cells(Row - 1, Column) If Intersect(Range(SelectArea), TargetCell) Is Nothing Then Else Range("A30").Cells(a, 0) = Range("B3").Cells(Row - 1, Column).Value a = a + 1 End If Next End Sub

  • Excel2003 VBAで印刷 セル指定

    よろしくお願いします。 ボタン5をクリックしてある範囲を印刷したいのですが、私が知っているものはセル指定でActiveSheet.PageSetup.PrintArea = Range("A90:K130") であれが印刷可能なのですが最後の行までにしたいのですがどうしてもうまくいきません。 ActiveSheet.PageSetup.PrintArea = Range(Cells(90, 1), Cells(r, 11)) それと同時に11列全部(文字は小さくてもいいのですが)一枚に印刷したのですが よろしくお願いします。 Private Sub CommandButton5_Click() res = MsgBox("決済記録を印刷します", vbYesNo + vbQuestion) If res = vbYes Then r = Range("A65536").End(xlUp).Row + 1 'Range(Cells(90,1),Cells(r,11)) '印刷したい範囲 ActiveSheet.PageSetup.PrintArea = Range("A90:K130") ActiveSheet.PrintOut preview:=True End If End Sub

  • 改行のあるセルをFindで検索したい

    エクセルです。 A1セルに 「あああ」と入力して、ALT+Enterで改行し、「いいい」と入力しました。 VBAで Sub test() MsgBox Cells.Find(What:="あああ" & Chr(13) & "いいい", LookAt:=xlWhole).Address End Sub として、セル番地を取得したいのですが オブジェクト変数または With ブロック変数が設定されていません。(Error 91) と言うエラーが返ってきてしまいます。 $a$1が返ってきてほしいのですが。 Sub test() Debug.Print Cells.Find(What:="あああ*", LookAt:=xlWhole).Address End Sub で、$a$1が返ってきますが、 できれば改行含む検索ができるようになりたいです。

  • 複数のセルを選択しているかを取得するプロパティは?

    SelectionChangeイベントで 複数のセルを選択しているかを取得するプロパティってないのでしょうか? 今は、 Private Sub Worksheet_SelectionChange(ByVal Target As Range) If Len(Target.Address) > 5 Then MsgBox "複数のセルが選択されています" End If End Sub こうしていますが、行数が多くなると文字も多くなってしまうので、このコードでは対応できません。 Rangeオブジェクトに何個セルが入ってるかを知る方法はありますか? ウォッチのTargetのcellsを見ても、どう見ればいいのかわかりません

  • VBA改行について

    Sub 改行() MsgBox "a" & vbCr & "i" MsgBox "a" & Chr(13) & "i" MsgBox "a" & vbLf & "i" MsgBox "a" & Chr(10) & "i" MsgBox "a" & vbCrLf & "i" MsgBox "a" & vbNewLine & "i" MsgBox "a" & Chr(13) + Chr(10) & "i" End Sub 上記のコードを実行すると、すべて改行できますが、 どれが正しい、一般的な改行のコードなのでしょうか? どれも正解だとは思いますが、 企業でプログラムを作る際、 どの改行のコードを使うのか知りたいです。 よろしくお願い致します。

  • VBA 1行のコードで表示したい。

    エクセルVBAです。 例えば、A1とB2に「a」と入力したい場合は、 Sub test1() Cells(1, 1) = "a" Cells(2, 2) = "a" End Sub とするしかないのでしょうか? Sub test2() Range(Cells(1, 1), Cells(2, 2)) = "a" End Sub だと、 A1、A2、B1、B2に「a」が入力されてしまいました。 test2のように、1行で離れているセルに「a」と入れる方法があれば教えて下さい。 (:は使わない方法です) ご回答よろしくお願い致します。

  • 改行について

    VBAでコードを作るにおいて 改行が必要な場合、 Sub 改行() MsgBox "1行目" & Chr(10) & "2行目" MsgBox "1行目" & Chr(13) & "2行目" MsgBox "1行目" & Chr(13) + Chr(10) & "2行目" MsgBox "1行目" & vbCr & "2行目" MsgBox "1行目" & vbLf & "2行目" MsgBox "1行目" & vbCrLf & "2行目" MsgBox "1行目" & vbNewLine & "2行目" End Sub どれを使うべきなのでしょうか? 理由も教えてください。

専門家に質問してみよう