【ExcelVBA】 쉼표로 구분 된 문자열을 지정된 범위에 맞게 출력
11729 단어 VBA
■목적
쉼표로 구분 된 문자열을 지정된 범위에 맞게 출력합니다.
・지정 범위에 맞는 문자수로 개행
・개행시는 쉼표 부분으로 개행한다
・지정 범위에 맞지 않는 경우는 행을 추가한다
■ 사전 준비
・출력용의 테두리를 만들어 둔다
・문자열 기재 장소, 출력용의 테두리는 표시 형식을 「문자열」로 해 둔다
· 매크로의 상수를 필요에 따라 변경
■ 샘플 코드
Option Explicit
Sub 文字列成型()
'記載欄は文字列型にしておく
Const brow As Long = 5 '開始行
Const bcol As Long = 2 '開始列
Const MojiNum As Long = 66 '一行に入る文字列
Const TargetRowNum As Long = 5 'テンプレートの行数
Dim targetStr As String '対象文字列
Dim startNum As Long '検索開始位置
Dim findNum As Long '検索結果位置
Dim findStr As String '検索結果文字列
Dim hanteiStr As String '文字数確認用
Dim n As Long '出力用配列の添え字
Dim targetAry() As String '出力用配列(1要素に1行分の文字列)
Dim i As Long
Dim j As Long
'対象文字列を変数に格納
targetStr = Range("B2").Value
'出力用配列の添え字を設定(最初は0)
n = 0
ReDim targetAry(0)
'開始位置を設定(最初は1)
startNum = 1
'対象文字列の「,」の位置を検索し、検索結果が0になるまで繰り返し
Do Until InStr(startNum, targetStr, ",") = 0
'検索結果位置を変数に格納
findNum = InStr(startNum, targetStr, ",")
'(最初は1,2回目以降は開始位置+1)から(検索結果位置-1)を抜き出す(検索結果文字列)
If startNum = 1 Then
findStr = Mid(targetStr, 1, findNum - 1)
Else
findStr = Mid(targetStr, startNum, findNum - startNum)
End If
'検索結果文字列を文字数確認用変数に格納(「,」を追記)
If hanteiStr = "" Then
hanteiStr = findStr & ","
Else
hanteiStr = hanteiStr & findStr & ","
End If
'文字数確認用配列の文字数を調べる
'66以下の場合
If Len(hanteiStr) <= MojiNum Then
'文字数確認用配列の値を出力用配列へ
targetAry(n) = hanteiStr
'66以上の場合
Else
'出力用配列の添え字を+1して検索結果文字列を格納
n = n + 1
ReDim Preserve targetAry(n)
targetAry(n) = findStr & ","
'文字列確認用変数の値を更新
hanteiStr = findStr & ","
End If
'開始位置を設定
startNum = findNum + 1
Loop
'残りの値がある場合
If Len(targetStr) > startNum Then
'残りの値を出力用配列に格納
'出力用配列最終添え字に値が入る場合は追記
If targetAry(n) <> "" And Len(targetAry(n)) < MojiNum Then
targetAry(n) = targetAry(n) & Right(targetStr, Len(targetStr) - startNum + 1)
'入らない場合は新しい添え字を+1して格納
Else
n = n + 1
ReDim Preserve targetAry(n)
targetAry(n) = Right(targetStr, Len(targetStr) - startNum + 1)
End If
End If
'出力用配列の添え字数が行数以上の場合
If UBound(targetAry) + 2 > TargetRowNum Then
'必要な数だけ行を増やす
Rows(brow + 1 & ":" & brow + UBound(targetAry) + 2 - TargetRowNum).Insert
End If
'出力用配列の値を転記
For j = 0 To UBound(targetAry)
Cells(brow + j, bcol).Value = targetAry(j)
Next j
End Sub
■ 샘플 코드 해설
· Excel 내용
Reference
이 문제에 관하여(【ExcelVBA】 쉼표로 구분 된 문자열을 지정된 범위에 맞게 출력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/karimeruro/items/6a8a0e08f0f46289b031
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
・출력용의 테두리를 만들어 둔다
・문자열 기재 장소, 출력용의 테두리는 표시 형식을 「문자열」로 해 둔다
· 매크로의 상수를 필요에 따라 변경
■ 샘플 코드
Option Explicit
Sub 文字列成型()
'記載欄は文字列型にしておく
Const brow As Long = 5 '開始行
Const bcol As Long = 2 '開始列
Const MojiNum As Long = 66 '一行に入る文字列
Const TargetRowNum As Long = 5 'テンプレートの行数
Dim targetStr As String '対象文字列
Dim startNum As Long '検索開始位置
Dim findNum As Long '検索結果位置
Dim findStr As String '検索結果文字列
Dim hanteiStr As String '文字数確認用
Dim n As Long '出力用配列の添え字
Dim targetAry() As String '出力用配列(1要素に1行分の文字列)
Dim i As Long
Dim j As Long
'対象文字列を変数に格納
targetStr = Range("B2").Value
'出力用配列の添え字を設定(最初は0)
n = 0
ReDim targetAry(0)
'開始位置を設定(最初は1)
startNum = 1
'対象文字列の「,」の位置を検索し、検索結果が0になるまで繰り返し
Do Until InStr(startNum, targetStr, ",") = 0
'検索結果位置を変数に格納
findNum = InStr(startNum, targetStr, ",")
'(最初は1,2回目以降は開始位置+1)から(検索結果位置-1)を抜き出す(検索結果文字列)
If startNum = 1 Then
findStr = Mid(targetStr, 1, findNum - 1)
Else
findStr = Mid(targetStr, startNum, findNum - startNum)
End If
'検索結果文字列を文字数確認用変数に格納(「,」を追記)
If hanteiStr = "" Then
hanteiStr = findStr & ","
Else
hanteiStr = hanteiStr & findStr & ","
End If
'文字数確認用配列の文字数を調べる
'66以下の場合
If Len(hanteiStr) <= MojiNum Then
'文字数確認用配列の値を出力用配列へ
targetAry(n) = hanteiStr
'66以上の場合
Else
'出力用配列の添え字を+1して検索結果文字列を格納
n = n + 1
ReDim Preserve targetAry(n)
targetAry(n) = findStr & ","
'文字列確認用変数の値を更新
hanteiStr = findStr & ","
End If
'開始位置を設定
startNum = findNum + 1
Loop
'残りの値がある場合
If Len(targetStr) > startNum Then
'残りの値を出力用配列に格納
'出力用配列最終添え字に値が入る場合は追記
If targetAry(n) <> "" And Len(targetAry(n)) < MojiNum Then
targetAry(n) = targetAry(n) & Right(targetStr, Len(targetStr) - startNum + 1)
'入らない場合は新しい添え字を+1して格納
Else
n = n + 1
ReDim Preserve targetAry(n)
targetAry(n) = Right(targetStr, Len(targetStr) - startNum + 1)
End If
End If
'出力用配列の添え字数が行数以上の場合
If UBound(targetAry) + 2 > TargetRowNum Then
'必要な数だけ行を増やす
Rows(brow + 1 & ":" & brow + UBound(targetAry) + 2 - TargetRowNum).Insert
End If
'出力用配列の値を転記
For j = 0 To UBound(targetAry)
Cells(brow + j, bcol).Value = targetAry(j)
Next j
End Sub
■ 샘플 코드 해설
· Excel 내용
Reference
이 문제에 관하여(【ExcelVBA】 쉼표로 구분 된 문자열을 지정된 범위에 맞게 출력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/karimeruro/items/6a8a0e08f0f46289b031
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Option Explicit
Sub 文字列成型()
'記載欄は文字列型にしておく
Const brow As Long = 5 '開始行
Const bcol As Long = 2 '開始列
Const MojiNum As Long = 66 '一行に入る文字列
Const TargetRowNum As Long = 5 'テンプレートの行数
Dim targetStr As String '対象文字列
Dim startNum As Long '検索開始位置
Dim findNum As Long '検索結果位置
Dim findStr As String '検索結果文字列
Dim hanteiStr As String '文字数確認用
Dim n As Long '出力用配列の添え字
Dim targetAry() As String '出力用配列(1要素に1行分の文字列)
Dim i As Long
Dim j As Long
'対象文字列を変数に格納
targetStr = Range("B2").Value
'出力用配列の添え字を設定(最初は0)
n = 0
ReDim targetAry(0)
'開始位置を設定(最初は1)
startNum = 1
'対象文字列の「,」の位置を検索し、検索結果が0になるまで繰り返し
Do Until InStr(startNum, targetStr, ",") = 0
'検索結果位置を変数に格納
findNum = InStr(startNum, targetStr, ",")
'(最初は1,2回目以降は開始位置+1)から(検索結果位置-1)を抜き出す(検索結果文字列)
If startNum = 1 Then
findStr = Mid(targetStr, 1, findNum - 1)
Else
findStr = Mid(targetStr, startNum, findNum - startNum)
End If
'検索結果文字列を文字数確認用変数に格納(「,」を追記)
If hanteiStr = "" Then
hanteiStr = findStr & ","
Else
hanteiStr = hanteiStr & findStr & ","
End If
'文字数確認用配列の文字数を調べる
'66以下の場合
If Len(hanteiStr) <= MojiNum Then
'文字数確認用配列の値を出力用配列へ
targetAry(n) = hanteiStr
'66以上の場合
Else
'出力用配列の添え字を+1して検索結果文字列を格納
n = n + 1
ReDim Preserve targetAry(n)
targetAry(n) = findStr & ","
'文字列確認用変数の値を更新
hanteiStr = findStr & ","
End If
'開始位置を設定
startNum = findNum + 1
Loop
'残りの値がある場合
If Len(targetStr) > startNum Then
'残りの値を出力用配列に格納
'出力用配列最終添え字に値が入る場合は追記
If targetAry(n) <> "" And Len(targetAry(n)) < MojiNum Then
targetAry(n) = targetAry(n) & Right(targetStr, Len(targetStr) - startNum + 1)
'入らない場合は新しい添え字を+1して格納
Else
n = n + 1
ReDim Preserve targetAry(n)
targetAry(n) = Right(targetStr, Len(targetStr) - startNum + 1)
End If
End If
'出力用配列の添え字数が行数以上の場合
If UBound(targetAry) + 2 > TargetRowNum Then
'必要な数だけ行を増やす
Rows(brow + 1 & ":" & brow + UBound(targetAry) + 2 - TargetRowNum).Insert
End If
'出力用配列の値を転記
For j = 0 To UBound(targetAry)
Cells(brow + j, bcol).Value = targetAry(j)
Next j
End Sub
· Excel 내용
Reference
이 문제에 관하여(【ExcelVBA】 쉼표로 구분 된 문자열을 지정된 범위에 맞게 출력), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/karimeruro/items/6a8a0e08f0f46289b031텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)