エクセルのセルをVBにドラッグアンドドロップしたときに、セルのXY位置を取得するにはどうすればいいでしょうか。
エクセルはExcel2000、VBはVB6です。
Netは使用できません。
テキストを取得するなら、Data.GetData(vbCFText)すればいいのは理解できますが、セルを取得できるフォーマットを探せません。
よろしくお願いします。
下記のような事ができればいいのでしょうか?
http://hanatyan.sakura.ne.jp/vbhlp/excel07.htm
早速のご回答、ありがとうございます。
拝見しましたが、やりたいこととちょっと違うようです。
私の表現が足りませんでした。
私の取得したいものは、エクセルのセルデータそのものではなく、ワークシート上のセルのXとYの絶対位置なのです。
取得の対象は、範囲ではなくてひとつのセルでOKですが、どの位置を指定されるかは全くわかりません。
取得したいタイミングは、エクセルからセルをVB6のフォームにドラッグアンドドロップしたときです。
ご指摘いただいたものだと、相対位置は取得できても絶対位置は取得できないような気がきがするのですが、そのあたりはどうなんでしょうか。
試していないのですが、ドラッグアンドドロップ時にクリップボードには必ずcells(1,1)からの値が入っているものなのでしょうか。
エクセルを2つ起動して、一方にセルをドラッグアンドドロップすると、同じ位置に同じ値が移動できるので、どうにかすると取得できるのではないかと思うのですが。
すいません。生意気な発言で。
ご検討よろしくお願いします。
>エクセルを2つ起動して、一方にセルをドラッグアンドドロップすると、同じ位置に同じ値が移動できるので、どうにかすると取得できるのではないかと思うのですが。
どのようにしてドラッグアンドドロップ しておられるのでしょうか?
ひょっとして コピー & ペースト の間違いとかではないですよね。
(コピーしたセルの位置を知りたいのならExcelの方で取得しないと。)
>試していないのですが、ドラッグアンドドロップ時にクリップボードには必ずcells(1,1)からの値が入っているものなのでしょうか
ドラッグアンドドロップ ってクリップボードを経由していましたっけ。
>どのようにしてドラッグアンドドロップ しておられるのでしょうか?
ひょっとして コピー & ペースト の間違いとかではないですよね。
(コピーしたセルの位置を知りたいのならExcelの方で取得しないと。)
そうですね。
エクセルを2つ起動して、ドラッグアンドドロップした場合も相対位置になりますね。
操作そのものは、こんな感じです。
1.エクセルを2つ起動します。
2.1つのエクセルで1つセルを選択します。
3.選択セルが太くなるので、その枠線をドラッグして、2つのエクセル上にマウスを移動してドロップします。
4.ドロップしたセルに1つ目のエクセルの選択セルのデータがコピーされます。
この動作はコピー&ペーストと同じ動作のような気もします。
やはり、セル位置をドラッグアンドドロップで取得するのは無理があるのかもしれません。
そうですね、考え方を変えて、エクセルのセル選択をするとVBにそのセル位置を渡す方法は取れないでしょうか。
セル選択時にセルのXY位置をシートに保存して、ドロップされた時にその値をADOで読み込むとか。
やってみると、セル範囲の変更のときは動いてくれますが、マウスダウン時には取得できないようです。
なにか解決するよい方法はないでしょうか。
>ドラッグアンドドロップ ってクリップボードを経由していましたっけ。
すいません。この辺の動作よく理解していません。不適切な質問でした。
よろしくご検討お願いします。
VBからExcelのWorksheet_SelectionChange イベントを取得してそのイベントで
選択セル位置又は、選択セル範囲を取得して見て下さい。
但し、取得してどうしたいのか? 何が目的なのかが解らないので、他にいい方法があるかも。
Private Sub xlApp_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Excel.Range)
MsgBox Target.Row & " " & Target.Column & vbCrLf & _
Target.Address
End Sub
ありがとうございます。
解決の糸口が見えてきました。
VBでエクセルにデータ転写をしたかったのですが、その転写位置をエクセルのセルを指定させることで行いたかったわけです。
指定セルをVBフォームに転写位置セルをドラッグアンドロップして取得できれば一番よかったのですが、その方法は無理そうなので、ご指摘いただいた最後の方法で何か考えて見ます。
ありがとうございました。