質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.37%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

解決済

2回答

771閲覧

VBAのFunctionの戻り値をActiveCell以外のセルに値を挿入したいです

morison

総合スコア10

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2021/08/24 13:45

前提・実現したいこと

VBAのFuction 使って、カンマ区切りのデータを横に展開したいです
具体的なA列にあるデータ(OU=以下)を引数にして、カンマ(",")で区切り数分
要素数をB列、C列、***に展開して値をいれたいです
例えばA1行目は
OU=XX1,OU=YY2,OU=ZZ3,OU=AA1,OU=AB1  はカンマ4つあるので、要素は5個あるので、
B列、C列、D列、E列、F列に各々要素の値を挿入したいです
※ 2行名は2個なのでBとC列、 3行目は4個なのでB列とC列とD列

極力簡単なvba function ソースコードを教えていただきたいです

▽▽▽▽▽▽▽▽▽▽▽
A B C D E F
OU=XX1,OU=YY2,OU=ZZ3,OU=AA1,OU=AB1 OU=XX1 OU=YY2 OU=ZZ3 OU=AA1 OU=AB1
OU=XX1,OU=YY2 OU=XX1 OU=YY2
OU=XX1,OU=YY2,OU=ZZ3,OU=AA3 OU=XX1 OU=YY2 OU=ZZ3 OU=AA3
OU=XX1,OU=YY2,OU=ZZ3 OU=XX1 OU=YY2 OU=ZZ3
OU=XX1,OU=YY2,OU=ZZ3,OU=AA5,OU=AB5 OU=XX1 OU=YY2 OU=ZZ3 OU=AA5 OU=AB5

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

試したことのソースコードおよび小生の理解不足をご教示いただきたいです

試したこと

小生が戻り値が0、横のセルに値が展開できないです
循環小数になります

Function DepartmentName(arg1 As String)
Dim i As Long
Dim j As Long
Dim k As Long
Const Delimiter As String = ","
Dim DepartmentArray As Variant
i = ActiveCell.Row
j = ActiveCell.Column

DepartmentArray = Split(arg1, Delimiter) For k = 0 To UBound(DepartmentArray) Cells(i + k, j) = DepartmentArray(k) Next

End Function

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

ありがとうございました
整理してコード考えます 
もうすこし実現したいことができいないですが、再度質問します
いったんクローズします

ありがとうございました

投稿2021/08/25 13:41

morison

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

<追記>
引数を渡す形に修正しました。

VBA

1Function SplitFunc(arg1 As Range) 2 Dim a, u 3 a = Split(arg1.Value, ",") 4 u = UBound(a) + 1 5 If u > 0 Then ActiveCell.Resize(, u).Value = a 6End Function 7 8Sub test_SplitFunc() 9 Range("G1").Select 10 Call SplitFunc(Range("A1")) 11End Sub 12

Excelのバージョンが最新なら、SPILLを利用することもできます。

VBA

1Function SPLITSPILL(arg1, Optional d = ",") 2 SPLITSPILL = Split(arg1, d) 3End Function 4 5Sub test_SPLITSPILL() 6 Range("G1").Formula2 = "=SPLITSPILL(A1)" 7End Sub 8

<追記前>
こんな感じでどうでしょうか。

vba

1Sub sample() 2 Const Delimiter As String = "," 3 Dim ws As Worksheet, i, arr 4 5 Set ws = ActiveSheet 6 For i = 1 To ws.Cells(ws.Rows.Count, 1).End(xlUp).Row 7 arr = Split(ws.Cells(i, 1).Value, Delimiter) 8 ws.Cells(i, 2).Resize(, UBound(arr) + 1).Value = arr 9 Next 10End Sub

投稿2021/08/24 16:12

編集2021/08/25 05:46
jinoji

総合スコア4592

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

morison

2021/08/25 03:57

回答ありがとうございます 頂いたsample() コード実行してうまくいきました ただ、A行目を引数で渡す Function(arg1) でVBAを作成したいです 例えば G1, G2のセル上でFunction(A1) 引数OU=XX1,OU=YY2,OU=ZZ3,OU=AA1,OU=AB1 Funtion(A2)  引数 OU=XX1,OU=YY2 を使いです 戻り値は、A1の場合 G1, H1, I1, J1, K1 A2の場合はG2, H2 のセルに各要素の値を展開したいです 引き続き教えていただけると助かります
takanaweb5

2021/08/25 05:04 編集

office365のexcelでしょうか? 上記バージョンならスピル機能が使えますが違えば使えないので
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.37%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問