セル範囲のデータをテキストとしてクリップボードに取り込みたいのです。
http://okwave.jp/qa/q5650002.html#16327676 の回答ANo2を見て
Sub test01()
Dim myData As DataObject
Dim myCb As Variant
Dim x
x = "TESTデータです。"
Set myData = New DataObject
myData.SetText x
myCb = myData.GetText
myData.PutInClipboard
End Sub
は出来ました。
そこで、セル範囲A1:B3をクリップボードに貼ろうといろいろやってみました。
一応、下記でできましたが、実際にはもっと広い範囲を取り込みたいので、もっと簡単な方法はないでしょうか?
Sub Clip()
Dim myStr As String
Dim myData As DataObject
Dim myCb As Variant
Set myData = New DataObject
With Sheets(1)
myStr = .Range("A1").Value & ":" & .Range("B1").Value & _
vbNewLine & .Range("A2").Value & ":" & .Range("B2").Value & _
vbNewLine & .Range("A3").Value & ":" & .Range("B3").Value
End With
myData.SetText myStr ', 1
myCb = myData.GetText
If MsgBox("データ" & vbNewLine & myCb & " をクリップボードに送りますか? ", vbYesNo + vbQuestion, "確認") = vbNo Then
Exit Sub
End If
myData.PutInClipboard
End Sub
セル範囲のデータをテキストとしてクリップボードに取り込みたいのです。
http://okwave.jp/qa/q5650002.html#16327676 の回答ANo2を見て
Sub test01()
Dim myData As DataObject
Dim myCb As Variant
Dim x
x = "TESTデータです。"
Set myData = New DataObject
myData.SetText x
myCb = myData.GetText
myData.PutInClipboard
End Sub
は出来ました。
そこで、セル範囲A1:B3をクリップボードに貼ろうといろいろやってみました。
一応、下記でできましたが、実際にはもっと広い範囲を取り込みたいので、もっと簡単な方法はないでしょうか?
Sub Clip()
Dim myStr As String
Dim myData As DataObject
Dim myCb As Variant
Set myData = New DataObject
With Sheets(1)
myStr = .Range("A1").Value & ":" & .Range("B1").Value & _
vbNewLine & .Range("A2").Value & ":" & .Range("B2").Value & _
vbNewLine & .Range("A3").Value & ":" & .Range("B3").Value
End With
myData.SetText myStr ', 1
myCb = myData.GetText
If MsgBox("データ" & vbNewLine & myCb & " をクリップボードに送りますか? ", vbYesNo + vbQuestion, "確認") = vbNo Then
Exit Sub
End If
myData.PutInClipboard
End Sub
マクロでCSVファイルを取込むプログラムを作成しております。
最終行を取得するソースまではできたのですが、最終列を取得する処理ができておりません。
教えて頂けないでしょうか。
処理概要
(1)ボタンを押したら、Sheet2にCSVファイルがインポートされる
(2)Sheet2に出力されたA2行~A8行とA2行~A8行の最終列までをSheet1のD4行~D10行、D4行~D10行の列にコピー
(3)Sheet2に出力されたA9行目はコピーしない
(4)Sheet2に出力されたA10行以降とA10行以降の最終列までをSheet1のA13行以降の最終列までにコピー
現在のソースは(2)、(4)の最終列を取得するソース以外はできています。
(2)、(4)の最終列を取得し、コピーする方法を教えて下さい。
現在のソースです。
Sub READ_TextFile()
Dim LoadFileName As String
Dim LR As Long
'選んだcsvファイルをSheet1に読み込む
LoadFileName = Application.GetOpenFilename("CSVファイル(*.csv),*.csv", 1, "読み込むcsvファイルを選んで下さい", False)
If LoadFileName = "False" Then Exit Sub
Workbooks.Open LoadFileName
Cells.Copy ThisWorkbook.Sheets("Sheet2").Range("A1")
ActiveWorkbook.Close False
'Sheet2のA2:A8をSheet1のD4を先頭セルとする範囲にCopy
Worksheets("Sheet2").Range("A2:A8").Copy Worksheets("Sheet1").Range("D4")
'Sheet2のA列のデータのある最終行を取得しLRという変数に入れる
LR = Worksheets("Sheet2").Cells(Rows.Count, 1).End(xlUp).Row
'Sheet2のA10からA列の最終行までをSheet1のA13を先頭セルとする範囲にCopy
Worksheets("Sheet2").Range("A10:A" & LR).Copy Worksheets("Sheet1").Range("A13")
End Sub
Ecxel2003 のマクロ上で、複素数の構造体を以下のように定義しました。
Public Type Complex
R As Double
I As Double
End Type
2つの実数(引数)を複素数に変換する関数を、以下のように定義しました。
Public Function setComplex(x As Double, y As Double) As Complex
setComplex.R = x
setComplex.I = y
End Function
複素数の絶対値を計算する関数を以下のように定義しました。
Public Function absComplex(A As Complex) As Double
absComplex = Sqr(A.R * A.R + A.I * A.I)
End Function
これらの定義式を用いて、ワークシート上の数値を参照して
計算しようとしても、なぜかうまくいくません。
うまくいかない例 → =absComplex(setComplex(B6,C6))
(セル"B6"には 2 、セル"C6"には 3 が格納済み)
マクロ上で計算する場合はうまくいきます。
Public Function test() As Double
Dim varC1 As Complex
varC1 = setComplex(2, 3)
test = absComplex(varC1)
End Function
適当なセル上で、=test() と打ち込むと、√13に相当する少数が表示されます。
なぜ、=absComplex(setComplex(B6,C6)) では計算してくれないのでしょうか?。
そもそも、マクロ上で定義した構造体を、セル上で用いようとするのがいけないのでしょうか?
どなたか、ご教授願います。
A列にスペース区切りのデータがあります
これをC列 D列 に分けて表示したいのですが
A列のデータが不規則(個数がバラバラ 空白もある)
と、なった場合 なかなか上手くいきません
C列以降は使用可能です(空いてます)
その道の方 お助けたください
元のVBAは
Sub Sample3()
Dim i As Long, tmp As Variant
For i = 2 To 22
tmp = Split(Cells(i, 1), " ")
Cells(i, 2) = tmp(0)
Cells(i, 3) = tmp(1)
Next i
End Sub
です
お手数ですが宜しく
お願いします