セルの中に、「ALt+Enter」で複数行に折り返している文字列があって、
1行目は何文字で、折り返した2行目は何文字、3行目は何文字…
とカウントさせたいのですが…???
無理???
できましたら、具体的に記述して教えてください。

このQ&Aに関連する最新のQ&A

A 回答 (3件)

こんな書き方もあるということで・・・


対象セルを1つ選択して下記マクロを実行します。

Sub MojisuCount()
Dim moji As String '選択セルの内容
Dim rw As Integer '行カウンタ
Dim pot As Integer 'Instrで調べた改行コードの位置

moji = Selection & vbLf '選択セルの文字の最後に改行を付加(判定を不要にする)
pot = InStr(moji, vbLf) '改行コードの位置は?
While pot > 0 'なくなるまで続ける
rw = rw + 1 '行を進める
MsgBox rw & "行目は " & pot - 1 & " 文字です"
moji = Mid(moji, pot + 1) '改行文字の次からを新たな検索対象にする

pot = InStr(moji, vbLf) '改行コードの位置は?
Wend
End Sub
    • good
    • 0
この回答へのお礼

すばらしくうまく動いてくれました。
感激です。

あなた様の作ってくださるマクロは、ものすごく見やすいです!!!
コメントも書いていただいて、本当に感謝感激です。
これからもお世話してください。
ありがとうございました。

お礼日時:2001/08/05 15:03

Splitを使うと簡単になります。


Splitは、指定した文字で、文字列を区分けして、配列に入れてくれます。
こんな感じです。

Dim vTerm As Variant
Dim sOrg As String
sOrg = ThisWorkbook.Worksheets(1).Cells(1, 1).Value
vTerm = Split(sOrg, vbLf)
If UBound(vTerm) >= 0 Then
MsgBox (UBound(vTerm) + 1) & "行データがあります。"
Else
MsgBox "データは入っていません。"
End If

For i = 0 To UBound(vTerm)
MsgBox (i + 1) & "行目の文字数は、" & Len(vTerm(i)) & "です。"
Next
    • good
    • 0

ずばり以下のとおりです。

短時間で制作の為、変数などへんてこで分かり難いかもしれませんが。
適当に解析してねー

Dim i, j, kk, sub_K, Ssub_K, k(100) As Integer
Dim moji As String

moji = Range("b4").Value
j = Len(moji)
kk = 1
For i = 0 To j
sub_K = InStr(i + 1, moji, Chr(10))
If sub_K = 0 Then i = j: k(kk) = j - Ssub_K: Exit For Else i = sub_K
k(kk) = (sub_K - Ssub_K) - 1
Ssub_K = sub_K
kk = kk + 1
Next i
For i = 1 To kk
MsgBox k(i)
Next i
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QAlt+Enterでセル内改行された文字をVBで認識させるには?

Excel2000です。

例えばA1に以下の様にAlt+Enterで改行された文字が書かれている時に
IF文を使ってマクロを実行したい場合、???にはどう書けば良いのでしょうか?
???に、1234Alt+Enter5678 と同じとさせる書き方です。
┌──┐
│1234│
│5678│
└──┘

Dim 認識 As String

認識 = Cells(1,1).Value
IF 認識 = ??? Then
・・・・実行したいマクロ

Aベストアンサー

"1234"+Chr(10)+"5678"です。

QエクセルでALT+改行した←の文字をEUCで表すと何になりますか?

エクセルで、ALT+リターンを押すと改行したファイルを
TSVで保存しテキストエディタで見ると
←の文字になりました。
Beckyメーラでもたまに見かけます。
普通の改行は\r\nですが、
←の改行は、EUCではどういう文字コードになるのでしょうか?

Aベストアンサー

UNIXでは

記号 LF
改行文字 \n
改行コード値 \x0A

QAlt+P,Alt+NをPostmessageで送るには

あるアプリがあり、そのハンドルを取得してからメッセージを送るプログラムを作っています。
PageUp,PageDownをそれぞれAlt+P,Alt+Nに変換して送るものです。
関数・定数宣言部は省略しています。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Dim hTest As Long
  hTest = FindWindow(vbNullString, "Test")
  If KeyCode = 33 Then 'PageUp
    PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0
    PostMessage MPL, WM_KEYDOWN, VK_N, 0
    PostMessage MPL, WM_KEYUP, VK_N, 0
    PostMessage MPL, WM_SYSKEYUP, VK_ALT, 0
  ElseIf KeyCode = 34 Then 'PageDown
    PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0
    PostMessage MPL, WM_KEYDOWN, VK_P, 0
    PostMessage MPL, WM_KEYUP, VK_P, 0
    PostMessage MPL, WM_SYSKEYUP, VK_ALT, 0
  End If
End Sub

送り先(Test.exe)では、
Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Dim L As String
  L = ""
  If Shift = 4 Then L = "Alt + "
  Label1.Caption = L & KeyCode
End Sub

ラベルで「Alt+P」などが来ているかどうか見ています。こちらのウィンドウで「Alt+P」を押すとちゃんと表示されます。

しかし、この2つを組み合わせるとPのみやNのみしか送られてきません。どこかおかしいのでしょうか。

Alt+PなどをPostMessageで送る方法でよい方法があれば、お教え下さい。
よろしくお願いします。

あるアプリがあり、そのハンドルを取得してからメッセージを送るプログラムを作っています。
PageUp,PageDownをそれぞれAlt+P,Alt+Nに変換して送るものです。
関数・定数宣言部は省略しています。

Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)
  Dim hTest As Long
  hTest = FindWindow(vbNullString, "Test")
  If KeyCode = 33 Then 'PageUp
    PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0
    PostMessage MPL, WM_KEYDOWN, VK_N, 0
    PostMessage MPL,...続きを読む

Aベストアンサー

ALTキーとの組み合わせでしたら、WM_SYSCHARのほうがいいのでは?
たぶん、送り先もVB製でしたら内部でTranslateMessageような感じですし。


あと、
>PostMessage MPL, WM_SYSKEYDOWN, VK_ALT, 0

MPLってなんですか?
>hTest = FindWindow(vbNullString, "Test")
で取得したウィンドウにPostMessageするんじゃないんですか?


次に、
>Private Sub Form_KeyDown(KeyCode As Integer, Shift As Integer)

KeyDownイベントに処理が書かれてますが、このイベント自体は呼ばれてますか?キー操作を受け付けるコントロールが張り付いてるのにKeyPreviewプロパティがFalseなんてことは無いですか?

#ちなみに、普通はVK_ALTではなくVK_MENUですので。

Qhtmlソースをテキストボックスに表示させて20行目の10文字の数字を取得したい。

恐れ入ります。
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/WebClient/

このページのコードを使わせてもらって
htmlソースをテキストボックスに表示することはできました。表示させたテキストボックスの20行目の10文字の数字を取得したいのですが、どのようにすれば取得できるんでしょうか?val関数も1行目だけみたいですし・・・。ちなみに20行目は

var strReqHomeID = "0000100012";

という具合になっていて  0000100012 を取得したいのです。



-------------------以下コード----------------
Imports System
Imports System.Text


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Try
Dim download As New Net.WebClient()
Dim temp As Byte() = download.DownloadData(TextBox1.Text)
Dim change As Text.Encoding = Encoding.Default
TextBox2.Text = change.GetString(temp)


Dim filename As String = System.IO.Path.GetFileName(TextBox1.Text)
If filename = "" Then
filename = "Temp.html"
End If


Dim strPath = My.Computer.FileSystem.SpecialDirectories.Desktop
strPath = strPath + "\" + filename
download.DownloadFile(TextBox1.Text, strPath)
WebBrowser1.Navigate(TextBox1.Text)
Catch ex As Exception
Throw
End Try
End Sub

恐れ入ります。
http://www.microsoft.com/japan/msdn/vbasic/migration/tips/WebClient/

このページのコードを使わせてもらって
htmlソースをテキストボックスに表示することはできました。表示させたテキストボックスの20行目の10文字の数字を取得したいのですが、どのようにすれば取得できるんでしょうか?val関数も1行目だけみたいですし・・・。ちなみに20行目は

var strReqHomeID = "0000100012";

という具合になっていて  0000100012 を取得したいのです。



--------------...続きを読む

Aベストアンサー

テキストボックスには各行をLines()の配列に保持してるようです。
なので行数をチェックしてから、Mid()関数を使って10行目の最初から10文字をとりだします。
-----------------------------------
  Dim strData As String
  Dim i As Integer

  i = TextBox1.Lines.Length
  If i >= 10 Then
  strData = Mid(TextBox1.Lines(9), 1, 10)
  MsgBox(strData, MsgBoxStyle.OKOnly)
  End If
---------------------------------------------
もし何かありましたら、レスください

QENTER押さなくても数式にて変更され文字に対してマクロ実行できますか?

A2にコードを入力するとC2にSheet2のC列から数式で文字が現れます。
その自動で現れた文字に対し、マクロを実行させたいのですが出来ますでしょうか?

C2には以下の数式が入ってます
=VLOOKUP(A2,Sheet2,3,FALSE)



今、設定しているマクロは



Private Sub Worksheet_Change_1(ByVal Target As Range)

If Target.Address = "$C$2" Then

If Target.Value = "A" Then


' 前の奴を開いていたら閉じる
Call WindowsMediaPlayer1.Close

' "movie.wmv"っていう名前のファイルを再生する
FilePath = ThisWorkbook.Path & "\" & "testA.wmv"

' ファイル名を設定する
WindowsMediaPlayer1.URL = FilePath

' 再生を開始する
Call WindowsMediaPlayer1.Controls.Play



ElseIf Target.Value = "B" Then


' 前の奴を開いていたら閉じる
Call WindowsMediaPlayer1.Close

' "movie.wmv"っていう名前のファイルを再生する
FilePath = ThisWorkbook.Path & "\" & "testB.wmv"

' ファイル名を設定する
WindowsMediaPlayer1.URL = FilePath

' 再生を開始する
Call WindowsMediaPlayer1.Controls.Play

End If
End If


End Sub

こんな感じです。

宜しくお願いします。

A2にコードを入力するとC2にSheet2のC列から数式で文字が現れます。
その自動で現れた文字に対し、マクロを実行させたいのですが出来ますでしょうか?

C2には以下の数式が入ってます
=VLOOKUP(A2,Sheet2,3,FALSE)



今、設定しているマクロは



Private Sub Worksheet_Change_1(ByVal Target As Range)

If Target.Address = "$C$2" Then

If Target.Value = "A" Then


' 前の奴を開いていたら閉じる
Call WindowsMediaPlayer1.Close

' "movie.wmv"っていう名前のファイルを再生...続きを読む

Aベストアンサー

あらま、こちらにも同じような質問をされていましたね。
とりあえず
If Target.Address = "$A$2" Then

If Range("C2").Value = "A" Then
で試してみて・・・


このカテゴリの人気Q&Aランキング

おすすめ情報