• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:VBA ユーザー関数の作成 (配列を利用 ?))

VBAユーザー関数作成:配列利用方法と要約文の作成

このQ&Aのポイント
  • VBAを使用して、セルの特定文字を見つけて前後の数値を抜き出し、ユーザー関数にする方法について教えてください。
  • セルに書き込む代わりに配列に書き込むことで効率的に処理する方法がありますが、具体的なやり方が分かりません。
  • 例えば、文字列から特定文字「:」を見つけて、その前後の数値を抜き出し、分秒を表示するVBA関数の作成方法を教えてください。

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

  • ベストアンサー
  • kkkkkm
  • ベストアンサー率66% (1725/2595)
回答No.2

配列というのがよく分かりませんが、他から呼び出すFunctionでしたら Sub Test() Dim i As Long Dim LastNo As Long LastNo = Cells(Rows.Count, "A").End(xlUp).Row For i = 2 To LastNo Call 他から呼び出す分秒抜き出し(Cells(i, "A")) Next End Sub Function 他から呼び出す分秒抜き出し(セル As Range) Dim 位置 As Integer Dim temp As String, temp2 As String Dim mMinutes As Long, mSeconds As Long 位置 = InStr(セル.Value, ":") temp = Left(セル.Value, 位置 - 1) temp2 = Mid(セル.Value, 位置 + 1) If Mid(temp, 位置 - 2, 1) = "(" Or _ Mid(temp, 位置 - 2, 1) = " " Then '9分以下 mMinutes = Right(temp, 1) Else '10分以上 mMinutes = Right(temp, 2) End If mSeconds = Left(temp2, 2) セル.Offset(0, 3).NumberFormatLocal = "[s].000" '小数点以下で表示 セル.Offset(0, 3).Value = "0:" & mMinutes & ":" & mSeconds End Function

NuboChan
質問者

お礼

kkkkkmさん、毎回の回答感謝します。 やりたいことはNO1.回答のユーザー関数(Function)の事で セルを利用せずに解がでるしコードがすごく短くなって嬉しいです。 結果、No2回答のような方法で利用したいと思います。 >配列というのがよく分かりませんが、 これは、セルに計算結果や(一時)表示を入れないで  Dim HAI_B(1 to 100) のように定義して 配列をセルの代わりに利用出来ないと考えましたが その必要は無いのが判りました。 これで現在進めているマクロの見直しに明かりがみえました。

その他の回答 (2)

  • kkkkkm
  • ベストアンサー率66% (1725/2595)
回答No.3

> 結果、No2回答のような方法で利用したいと思います。 For i = 2 To LastNo Cells(i, "E").NumberFormatLocal = "[s].000" '小数点以下で表示 Cells(i, "E").Value = 分秒抜き出し(Cells(i, "A")) Next こんな感じですね。書き出すセルの融通が利くのでいいですね。

  • kkkkkm
  • ベストアンサー率66% (1725/2595)
回答No.1

ユーザー関数というのがセルに =分秒抜き出し(A2) みたいに利用したいというのでしたら ただし、書式設定は関数ではできないので手動で設定してください。 他のプロシージャから呼び出すタイプのFunctionだとしても同じような感じでできると思います。 Function 分秒抜き出し(セル As Range) As Double Dim 位置 As Integer Dim temp As String, temp2 As String Dim mMinutes As Long, mSeconds As Long 位置 = InStr(セル.Value, ":") temp = Left(セル.Value, 位置 - 1) temp2 = Mid(セル.Value, 位置 + 1) If Mid(temp, 位置 - 2, 1) = "(" Or _ Mid(temp, 位置 - 2, 1) = " " Then '9分以下 mMinutes = Right(temp, 1) Else '10分以上 mMinutes = Right(temp, 2) End If mSeconds = Left(temp2, 2) 分秒抜き出し = CDbl(TimeValue("0:" & mMinutes & ":" & mSeconds)) End Function

関連するQ&A