- PR -

配列のデータをEXCELにペーストする

投稿者投稿内容
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2003-12-17 17:42
お疲れ様です。
るぱんです。
VBScriptで簡易的に組んでみましたが、成功しています。
*お試し版です。*
コード:
Dim obj
Dim temp

    temp = 1
    Set obj = CreateObject("Excel.Application")
    obj.Visible = True
    obj.workBooks.open "C:\Temp.xls"
    obj.activesheet.cells(1,1).value = temp
    obj.save
    obj.WorkBooks.Close
    obj.quit
    Set obj = Nothing



以下はおそらく正解になるだろうと思われるScript
*模範解答版*
コード:
'これで正解になるはずです。御確認ください。
'そのまま貼り付ければいけると思います。
Dim obj
Dim temp
Dim n
'Dim dHIZUKE()
'Dim NODO()
    temp = 1
    Set obj = CreateObject("Excel.Application")
    obj.Visible = True
    obj.workBooks.open "C:\Temp.xls"

    For n = 1 To 21 
        obj.ActiveSheet.Cells(n,1) = CDate(dHIZUKE(n))
        obj.ActiveSheet.Cells(n,1) = CLng(NODO(n))
        'エクセルがデータベースではない場合
        '以下のようになると思います。
        'obj.ActiveSheet.Cells(n,1).Value = CDate(rs.Fields(0).Value)
        'obj.ActiveSheet.Cells(n,2).Value = CLng(rs.Fields(1).Value)
    Next n

    obj.save
    obj.WorkBooks.Close
    obj.quit
    Set obj = Nothing

Beatle
ぬし
会議室デビュー日: 2003/06/09
投稿数: 394
投稿日時: 2003-12-17 18:18
あのう...ゴミレスですけど、これでは配列にした意味は無いのではないでしょうか?

> For n = 1 To 21
> obj.ActiveSheet.Cells(n,1) = CDate(dHIZUKE(n))
> obj.ActiveSheet.Cells(n,1) = CLng(NODO(n))
> 'エクセルがデータベースではない場合
> '以下のようになると思います。
> 'obj.ActiveSheet.Cells(n,1).Value = CDate(rs.Fields(0).Value)
> 'obj.ActiveSheet.Cells(n,2).Value = CLng(rs.Fields(1).Value)
> Next n

EXCELに配列で貼り付けるというのは、
   ActiveSheet.Range("A1:D30")=Hairetsu
   ActiveSheet.Range("A1")=Hairetsu
With ActiveSheet
    .Range(.Cells(1,1),.Cells(8,100))=Hairetsu
End With
のような形で2次元の配列をRangeに一発で貼り付けるようにするのでは?
このとき、配列の1次元目と2次元目がEXCELでは行、列になるのでそれを
意識して配列データを作らないと、列方向にデータが貼りついたりしてしまい
ます。
数値に関しては代入する際に0を引くとか(Scriptでやるように)で無理やり数値認識
させて代入してもだめでしょうか?

[ メッセージ編集済み 編集者: Beatle 編集日時 2003-12-17 18:20 ]
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2003-12-17 18:19
お疲れ様です。
るぱんです。

先程はよく読まずに返信してしまいました。
ごめんなさい。

Excelに対してADO接続か何か仕掛けてるのかな?

コード:
ASP┬→@DBから値取得後、配列格納
   └→A@で作成した配列をExcel出力


なのですね。

でしたら、ExcelでTemplateファイルを作り、その中にマクロを仕込んでおいて、
@ExcelTemplate
AASPで作成したExcelファイル
BActiveSheetに対してExcelTemplateのマクロ実行
CASPで作成したExcelファイルをセーブ
D使ったファイル、変数を全てを破棄

でやる方が効率良いですね。
参考にしてみてください。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2003-12-17 23:40
貼り付ける配列の中に、DbNullなデータがないですか?

 KBを参考にして、EXCELをデータベースに見立ててデータのやりとりをやったのですが、EXCELって「データベース」ではないので「列の型」が指定できないじゃないですか。で、複数の型があった場合、つまり、数値と空白セルがあった場合、多い方の型が採用される、という現象がありました。

 え〜と、列Aに、「1」「」「3」「」「5」と入っていたとします。これだと「数値」である行と、「」(ヌル=文字列)である行があるため、数を数えると3:2で数値行の方が多い。従って列Aは「数値」として取得、設定できる。
 ところが、列Bは「」「2」「」「4」「」と入っていました。これだと2:3で「文字列」の方が多い。従って、列Bは「文字列」として取得、設定できる。


参考まで。
なか-chan@最愛のiMac
ぬし
会議室デビュー日: 2002/07/17
投稿数: 385
お住まい・勤務地: 和光市・世田谷区
投稿日時: 2003-12-18 08:53
harucaさんこんにちは。

xlSheet.Columns("A:A").NumberFormatLocal ="yyyy/mm/dd"
とか追加してみてはどうでしょうか?(試していませんが...)
haruca
会議室デビュー日: 2003/10/20
投稿数: 8
投稿日時: 2003-12-18 11:07
ちょっとついていけていない状況ですが、皆様のアドバイスをもとに頑張ってみます。
本当にありがとうございます!
(ちなみに配列に複数の型があった場合、多いほうの型が採用されるという事ですが、数値のみの配列データ(Null無し)をその個数分のセル範囲に書き込んでみたところ、やはり '(シングルクオーテーション)がついてきてしまいました。)
グータラ犬
会議室デビュー日: 2003/12/19
投稿数: 2
投稿日時: 2003-12-19 01:07
この現象ですが、Excel2002では発生しないと思います。
Excel2000の場合、以下の処理をVBAで作成して誤魔化しています。
(1)左寄せになった部分を選択
(2)コピー
(3)”形式を選択して貼り付け”で、演算の項目の”加算”を選択
何も書かれていないセルに加算して貼り付けると、
貼り付けられた数字は右寄せになり、数字として認識されます。
るぱん
ぬし
会議室デビュー日: 2003/08/01
投稿数: 1370
投稿日時: 2003-12-19 10:39
おはようございます。
るぱんです。

Excel2000 SR-1で動作確認済です。

>グータラ犬様
NumberFormatLocalではなく・・・?
データの加工は全自動でやると言う前提がおかしいのかな・・・?

全自動・・・なんか、食器洗い洗濯機見たいですね。(自爆)

スキルアップ/キャリアアップ(JOB@IT)