Excel VBA質問箱 IV

当質問箱は、有志のボランティア精神のおかげで成り立っています。
問題が解決したら、必ずお礼をしましょうね。
本サイトの基本方針をまとめました。こちら をご一読ください。

投稿種別の選択が必要です。ご注意ください。
迷惑投稿防止のため、URLの入力を制限しています。ご了承ください。


5 / 13645 ツリー ←次へ | 前へ→

【82369】D列において括弧がついているデータのみ改行を行いたい すぺぺぺ 24/9/30(月) 16:45 質問[未読]
【82370】Re:D列において括弧がついているデータのみ... マナ 24/9/30(月) 21:33 発言[未読]
【82371】Re:D列において括弧がついているデータのみ... マナ 24/10/1(火) 9:10 発言[未読]
【82372】Re:D列において括弧がついているデータのみ... すぺぺぺ 24/10/1(火) 10:12 お礼[未読]
【82373】Re:D列において括弧がついているデータのみ... すぺぺぺ 24/10/3(木) 19:47 質問[未読]
【82374】Re:D列において括弧がついているデータのみ... マナ 24/10/4(金) 10:06 発言[未読]
【82375】Re:D列において括弧がついているデータのみ... すぺぺぺ 24/10/4(金) 16:13 質問[未読]
【82376】Re:D列において括弧がついているデータのみ... マナ 24/10/4(金) 22:02 発言[未読]
【82377】Re:D列において括弧がついているデータのみ... すぺぺぺ 24/10/4(金) 22:18 質問[未読]
【82378】Re:D列において括弧がついているデータのみ... マナ 24/10/4(金) 23:22 発言[未読]
【82379】Re:D列において括弧がついているデータのみ... すぺぺぺ 24/10/5(土) 2:57 回答[未読]
【82380】Re:D列において括弧がついているデータのみ... マナ 24/10/5(土) 8:51 発言[未読]
【82381】Re:D列において括弧がついているデータのみ... すぺぺぺ 24/10/5(土) 15:46 回答[未読]
【82382】Re:D列において括弧がついているデータのみ... すぺぺぺ 24/10/5(土) 19:05 お礼[未読]

【82369】D列において括弧がついているデータのみ...
質問  すぺぺぺ  - 24/9/30(月) 16:45 -

引用なし
パスワード
   下記のような条件にて動作をするVBAを作成したいのですがご教示頂けましたら幸いです。
D列においてランダムで、商品名(SHOUHINMEI)というデータがある場合のみ括弧を含めた括弧内の文字データのみをA列に改行したいのですが…
元データ→D列 商品名(SHOUHINMEI)
VBA実施後のデータ→D列 商品名、A列(SHOUHINMEI)

A列での同じような動作は下記のコードで実施できております。

Sub A列を取得()
  Application.ScreenUpdating = False

  Dim R As Long
  For R = 2 To Get最終行(ActiveSheet)
    If Cells(R, 1) <> "" Then
      Cells(R, 2) = Getカッコ内(Cells(R, 1))
    End If
  Next
  
End Sub

Function Getカッコ内(ByVal 元テキスト As String) As String
  
  元テキスト = Replace(元テキスト, "(", "(")
  元テキスト = Replace(元テキスト, ")", ")")

  Dim 開始 As Long, 終了 As Long
  開始 = InStr(元テキスト, "(") + 1
  終了 = InStr(元テキスト, ")") - 1
  
  If 開始 > 1 And 終了 >= 開始 Then
    Getカッコ内 = Mid(元テキスト, 開始, 終了 - 開始 + 1)
  End If

End Function
  ' シートの最終行を取得する
  Function Get最終行(ws As Worksheet) As Long
  Get最終行 = ws.UsedRange.Rows.Count + ws.UsedRange.Row - 1
  
End Function

【82370】Re:D列において括弧がついているデータの...
発言  マナ  - 24/9/30(月) 21:33 -

引用なし
パスワード
   ▼すぺぺぺ さん:

Sub test()
  
  With Range("A1", ActiveSheet.UsedRange).Offset(1).Columns(1)
    .FormulaR1C1 = "=if(rc[3]="""","""",Getカッコデータ(rc[3]))"
    .Value = .Value
  End With

End Sub


Function Getカッコデータ(ByVal 元テキスト As String) As String
 
  元テキスト = Replace(元テキスト, "(", "(")
  元テキスト = Replace(元テキスト, ")", ")")

  Dim 開始 As Long, 終了 As Long
  開始 = InStr(元テキスト, "(")
  終了 = InStrRev(元テキスト, ")")
 
  If 開始 > 1 And 終了 >= 開始 Then
    Getカッコデータ = Mid(元テキスト, 開始, 終了 - 開始 + 1)
  End If

End Function

【82371】Re:D列において括弧がついているデータの...
発言  マナ  - 24/10/1(火) 9:10 -

引用なし
パスワード
   ▼すぺぺぺ さん:

抽出ではなく、分割だったか?


Sub test()
  Dim v, k As Long
  Dim s As String, n As Long
 
  With Range("A1", ActiveSheet.UsedRange).Offset(1).Resize(, 4)
    v = .Value
    For k = 1 To UBound(v)
      s = v(k, 4)
      If s Like "?*[((]?*[))]" Then
        n = InStr(Replace(s, "(", "("), "(")
        v(k, 1) = Mid(s, n)
        v(k, 4) = Left(s, n - 1)
      End If
    Next
    .Value = v
  End With

End Sub

【82372】Re:D列において括弧がついているデータの...
お礼  すぺぺぺ  - 24/10/1(火) 10:12 -

引用なし
パスワード
   ▼マナ 様:

ご教授ありがとうございます!
分割を行いたい内容でしたが、抽出も併せて今後の参考にさせていただきます。
お忙しいところありがとうございました。

【82373】Re:D列において括弧がついているデータの...
質問  すぺぺぺ  - 24/10/3(木) 19:47 -

引用なし
パスワード
   ▼マナ 様

説明不足で申し訳ありません。
先日教えて頂きました分割のコードにて教えて頂きたい事があり書き込みさせて頂きます。

セルA〜Dの1,2行に下記のようなデータが入力されております。
A  B  C  D
1 あ い う  え(いろは)
2 1 2 3 4

教えて頂いたコードを実行すると括弧内の文字は移動はするのですが改行は行われず、
セルAのデータが消えセルDの括弧部分と置き換わり下記の状態になってしまいます。
 A    B  C  D
1(いろは) い  う  え
2 1   2  3 4

VBA実行後にD列の括弧を含め、D列の文字をA列に改行し挿入する場合はどのようにすればよいでしょうか。
以下のような状態の並びにしたいのですが・・・
  A  B  C  D
1 あ  い  う  え
2(いろは)
3 1  2  3  4

【82374】Re:D列において括弧がついているデータの...
発言  マナ  - 24/10/4(金) 10:06 -

引用なし
パスワード
   ▼すぺぺぺ さん:

v(k, 1) = v(k, 1) & vbLf & Mid(s, n)

【82375】Re:D列において括弧がついているデータの...
質問  すぺぺぺ  - 24/10/4(金) 16:13 -

引用なし
パスワード
   ▼マナ 様

度々申し訳ありません。
改行ではなく挿入の伝え間違えです。
元のデータの下段にセルを挿入し、挿入したA列のセルにDから分割したデータの移動が行いたいのですが…

お返事いただいたコードを実行し、使用したい部位の移動はできるのは確認いたしましたが、改行コードに変更したところうまく動作しない為ご返信させて頂きました。

【82376】Re:D列において括弧がついているデータの...
発言  マナ  - 24/10/4(金) 22:02 -

引用なし
パスワード
   ▼すぺぺぺ さん:

Sub test2()
  Dim a As Object
  Dim r As Range
  Dim w, v, k As Long
  Dim s As String, n As Long

  Set a = CreateObject("system.collections.arraylist")
  
  Set r = Range("A1", ActiveSheet.UsedRange).Offset(1).Resize(, 4)
  w = r.Value
  For k = 1 To UBound(w)
    v = Application.Index(w, k, 0)
    a.Add v
    s = v(4)
    If s Like "?*[((]?*[))]" Then
      n = InStr(Replace(s, "(", "("), "(")
      v(4) = Left(s, n - 1)
      a(a.Count - 1) = v
      a.Add Array(Mid(s, n), Empty, Empty, Empty)
    End If
  Next
  r.Resize(a.Count).Value = Application.Index(a.toarray, 0, 0)

End Sub

【82377】Re:D列において括弧がついているデータの...
質問  すぺぺぺ  - 24/10/4(金) 22:18 -

引用なし
パスワード
   ▼マナ 様

早速のご返答ありがとうございます。
最終行のコード
r.Resize(a.Count).Value = Application.Index(a.toarray, 0, 0) ここの部分にて型が一致しませんとエラーがでてしまうのですが、記載ミス等ございますでしょうか

【82378】Re:D列において括弧がついているデータの...
発言  マナ  - 24/10/4(金) 23:22 -

引用なし
パスワード
   ▼すぺぺぺ さん:

コピペして、そのまま使用していますか。
それとも、どこか修正していますか。

【82379】Re:D列において括弧がついているデータの...
回答  すぺぺぺ  - 24/10/5(土) 2:57 -

引用なし
パスワード
   ▼マナ様

コピペしてそのまま使用させて頂いております。
動作環境のソフトはOffice 2019です。

【82380】Re:D列において括弧がついているデータの...
発言  マナ  - 24/10/5(土) 8:51 -

引用なし
パスワード
   ▼すぺぺぺ さん:

まずは下記データで試してみてください

   A  B  C  D

2 あ  い  う  え(いろは)
3 1  2  3  4

   

【82381】Re:D列において括弧がついているデータの...
回答  すぺぺぺ  - 24/10/5(土) 15:46 -

引用なし
パスワード
   ▼マナ様

先ほど添付していただいたデータではエラー無く思った通りの動作をしておりました。
実際に使うデータにて改めて試してみます。

【82382】Re:D列において括弧がついているデータの...
お礼  すぺぺぺ  - 24/10/5(土) 19:05 -

引用なし
パスワード
   ▼マナ様

大変お手数おかけいたしました。
教えていただきましたコードで問題なく動作しておりました。

エラーが出てしまった原因として、コードを眺めていた際に余計なキーを押してしまっており、文字が入力されてしまっていた事が原因でした。

ありがとうございました。

5 / 13645 ツリー ←次へ | 前へ→
ページ:  ┃  記事番号:
2610219
(SS)C-BOARD v3.8 is Free