Excel VBA質問箱 IV

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

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


7522 / 13644 ツリー ←次へ | 前へ→

【38447】数字の貼り付け まち 06/6/3(土) 9:13 質問[未読]
【38449】Re:数字の貼り付け ぱっせんじゃー 06/6/3(土) 9:55 発言[未読]
【38450】Re:数字の貼り付け まち 06/6/3(土) 10:06 質問[未読]
【38452】Re:数字の貼り付け ぱっせんじゃー 06/6/3(土) 10:30 発言[未読]
【38473】Re:数字の貼り付け Kein 06/6/3(土) 17:41 回答[未読]
【38591】Re:数字の貼り付け まち 06/6/6(火) 21:55 質問[未読]
【38596】Re:数字の貼り付け Kein 06/6/6(火) 23:17 回答[未読]
【38599】Re:数字の貼り付け まち 06/6/7(水) 8:01 質問[未読]
【38621】Re:数字の貼り付け Kein 06/6/7(水) 15:17 回答[未読]

【38447】数字の貼り付け
質問  まち  - 06/6/3(土) 9:13 -

引用なし
パスワード
   おはようございます。ここでいいのかわかりませんが、質問があります。
すごく桁の大きな数字があります。(サイトからコピーしてきたもの)
それを5桁づつ、エクセルのシートに貼り付けたいのです。
もともと5桁の数字なので、テキスト形式で貼り付ける行に5桁づつ入力されます。(A1、B1、C1・・・)
これを、列で入力したいのですが(A1、A2、A3・・・)よくわかりません。
関数になるのか、マクロになるのかもよくわからないのですが、
どなたかアドバイスよろしくお願いします。

【38449】Re:数字の貼り付け
発言  ぱっせんじゃー  - 06/6/3(土) 9:55 -

引用なし
パスワード
   うまくいくかはわかりませんが・・・。
↓ではいかがでしょう?

貼り付ける際に、
→右クリック→形式を選択して貼り付け→
行列を入れ替えるにチェック→OK

【38450】Re:数字の貼り付け
質問  まち  - 06/6/3(土) 10:06 -

引用なし
パスワード
   ▼ぱっせんじゃー さん:
行列を入れ替えるは形式を選択して貼り付けの中にありますか?
項目が
○HTML
○Unicodeテキスト
○テキスト形式
の3つしかありません><

>うまくいくかはわかりませんが・・・。
>↓ではいかがでしょう?
>
>貼り付ける際に、
>→右クリック→形式を選択して貼り付け→
>行列を入れ替えるにチェック→OK

【38452】Re:数字の貼り付け
発言  ぱっせんじゃー  - 06/6/3(土) 10:30 -

引用なし
パスワード
   一度シートに転記してからでないと
だめなようですね。

VBAでするなら、
クリップボードの中身を変数に取込み、
変数の中身をTabで分割し、
配列を1行ごと改行しながら転記、と
いう手があります。

※Tabでいけるかは未検証です。

【38473】Re:数字の貼り付け
回答  Kein  - 06/6/3(土) 17:41 -

引用なし
パスワード
   サイトでコピーしてから、↓こんなコードで試してみて下さい。

Sub Split_MyData()
  Dim V As Variant
  Dim Flg As Boolean
  Dim Dobj As DataObject
  Dim St As String
  Dim Ary() As String, i As Long, j As Long
 
  For Each V In Application.ClipboardFormats
   If V = xlClipBoradFormatText Then
     Flg = True: Exit For
   End If
  Next
  If Flg = False Then
   MsgBox "テキストがコピーされていません", 48
   Exit Sub
  End If
  Set Dobj = New DataObject
  Dobj.GetFromClipboard
  St = Dobj.GetText(1): Set Dobj = Nothing
  For i = 1 To Len(St) Step 5
   ReDim Preserve Ary(j)
   Ary(j) = "'" & Mid$(St, i, 5)
   j = j + 1
  Next i
  Range("A1").Resize(UBound(Ary) + 1).Value = _
  WorksheetFunction.Transpose(Ary)
  Erase Ary
End Sub

いちおう分割入力している数値は、文字列の扱いとしていますが
数値に直しても大丈夫なら
>Ary(j) = "'" & Mid$(St, i, 5)


Ary(j) = Mid$(St, i, 5)

に、変更して下さい。

【38591】Re:数字の貼り付け
質問  まち  - 06/6/6(火) 21:55 -

引用なし
パスワード
   ▼Kein さん:
おそくなりましたがありがとうございました。
サイトでコピーしたものをA1、B1、C1...と行に貼り付けるんですよね?
それで、↓のコードで試したらいいんですよね?
そうしてみると、↓のコードが列に入力されるだけになってしまいます。
並べ替えのボタンを作って実行しているんですが、何がおかしいのでしょうか?
Private Sub 並び替え_Click()
  Dim V As Variant
  Dim Flg As Boolean
  Dim Dobj As DataObject
  Dim St As String
  Dim Ary() As String, i As Long, j As Long

  For Each V In Application.ClipboardFormats
   If V = xlClipBoradFormatText Then
     Flg = True: Exit For
   End If
  Next
  If Flg = False Then
   MsgBox "テキストがコピーされていません", 48
   Exit Sub
  End If
  Set Dobj = New DataObject
  Dobj.GetFromClipboard
  St = Dobj.GetText(1): Set Dobj = Nothing
  For i = 1 To Len(St) Step 5
   ReDim Preserve Ary(j)
   Ary(j) = "'" & Mid$(St, i, 5)
   j = j + 1
  Next i
  Range("A1").Resize(UBound(Ary) + 1).Value = _
  WorksheetFunction.Transpose(Ary)
  Erase Ary
End Sub

>サイトでコピーしてから、↓こんなコードで試してみて下さい。
>
>Sub Split_MyData()
>  Dim V As Variant
>  Dim Flg As Boolean
>  Dim Dobj As DataObject
>  Dim St As String
>  Dim Ary() As String, i As Long, j As Long
> 
>  For Each V In Application.ClipboardFormats
>   If V = xlClipBoradFormatText Then
>     Flg = True: Exit For
>   End If
>  Next
>  If Flg = False Then
>   MsgBox "テキストがコピーされていません", 48
>   Exit Sub
>  End If
>  Set Dobj = New DataObject
>  Dobj.GetFromClipboard
>  St = Dobj.GetText(1): Set Dobj = Nothing
>  For i = 1 To Len(St) Step 5
>   ReDim Preserve Ary(j)
>   Ary(j) = "'" & Mid$(St, i, 5)
>   j = j + 1
>  Next i
>  Range("A1").Resize(UBound(Ary) + 1).Value = _
>  WorksheetFunction.Transpose(Ary)
>  Erase Ary
>End Sub
>
>いちおう分割入力している数値は、文字列の扱いとしていますが
>数値に直しても大丈夫なら
>>Ary(j) = "'" & Mid$(St, i, 5)
>↓
>
>Ary(j) = Mid$(St, i, 5)
>
>に、変更して下さい。

【38596】Re:数字の貼り付け
回答  Kein  - 06/6/6(火) 23:17 -

引用なし
パスワード
   最初の質問文では
>これを、列で入力したいのですが(A1、A2、A3・・・)よくわかりません。
という事でしたが・・。
A1,B1,C1 ・・というように入力するなら
>Range("A1").Resize(UBound(Ary) + 1).Value = _
>WorksheetFunction.Transpose(Ary)


Range("A1").Resize(, UBound(Ary) + 1).Value = Ary

【38599】Re:数字の貼り付け
質問  まち  - 06/6/7(水) 8:01 -

引用なし
パスワード
   ▼Kein さん:
おはようございます。ええと・・・列で入力したいのです。
これは、標準モジュールにコードを入力すればいいのですか?
そうすると、「ユーザー定義型は定義されていません」というエラーメッセージがでます。
Sub Split_MyData()
  Dim V As Variant
  Dim Flg As Boolean
  Dim Dobj As DataObject 'Dobj As DataObjectがエラーになります。
  Dim St As String
  Dim Ary() As String, i As Long, j As Long

  For Each V In Application.ClipboardFormats
   If V = xlClipBoradFormatText Then
     Flg = True: Exit For
   End If
  Next
  If Flg = False Then
   MsgBox "テキストがコピーされていません", 48
   Exit Sub
  End If
  Set Dobj = New DataObject
  Dobj.GetFromClipboard
  St = Dobj.GetText(1): Set Dobj = Nothing
  For i = 1 To Len(St) Step 5
   ReDim Preserve Ary(j)
   Ary(j) = "'" & Mid$(St, i, 5)
   j = j + 1
  Next i
  Range("A1").Resize(UBound(Ary) + 1).Value = _
  WorksheetFunction.Transpose(Ary)
  Erase Ary
End Sub

重ね重ね申し訳ありませんが、よろしくお願いします。

【38621】Re:数字の貼り付け
回答  Kein  - 06/6/7(水) 15:17 -

引用なし
パスワード
   >Dim Dobj As DataObject 'Dobj As DataObjectがエラーになります。
VBEのメニューで「ツール」「参照設定」を選び、
"Microsoft Forms 2.0 Object Library" にチェックを付けて下さい。
もしリストの中に無い場合は、「挿入」「ユーザーフォーム」で
出てきます。
なお新規挿入したユーザーフォームは、使う目的が無ければ
右クリックしたときのメニューで開放して削除すればよいでしょう。

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