HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
1115
HakuEXCEL表からの文字列取得について7解決


Haku

リンク

2010/11/15(Mon) 23:43:23|NO.35859

サンプルスクリプトhspdbのtest3.hsp から下表のエクセルを
「SELECT * from A1:A5」でQUERYを実行すると、
結果値が「1.02.03.04.0」と少数点付きで得られます。
結果値が「12345]と小数点をなくす方法は、有るのかどなたかご教授願います。

行列 A B C D
1  項
2  1
3  2
4  3
5  4
6  5

調査してきた事
1.セルの書式設定を「標準」→「文字列」へ変更しても結果は、小数点で表示しました。
2.あらかじめ、書式設定を「標準」→「文字列」に変更した状態で、表を作成すると少数点は、
表示せず「12345」と表示しました。
3.セル値へ「'」を付けてみましたが、結果は、小数点付きでした。

一旦、「標準」で作った表からは、結果値が「12345」と得る事は、出来ないのでしょうか?



この記事に返信する


ANTARES

リンク

2010/11/16(Tue) 01:22:27|NO.35860


s="1.0" mes s mes int(s)
日本語を書かないと投稿できないので書いた日本語



damage

リンク

2010/11/16(Tue) 11:08:25|NO.35861

小数点というのは「3.14」のようなピリオドのことを言い、
「1.2.3.4.5」のようなピリオドは「小数点」とは言わないのですけどね。

>一旦、「標準」で作った表からは、結果値が「12345」と得る事は、出来ないのでしょうか?
HSPのCOM操作機能をつかって指定した範囲の書式を標準から文字列に変更してから結果を求めればいい。

あながたわたくしの代わりに必要な情報を調べてきていただけるならサンプルを書いてさしあげてもかまいませんが。



haku

リンク

2010/11/16(Tue) 21:30:31|NO.35870

色々とご回答頂きありがとうございます。
damageさん。ご指摘ありがとうございます。

>あながたわたくしの代わりに必要な情報を調べてきていただけるならサンプルを書いてさしあげてもかまいませんが。

COMを使用したプログラムを調査してみたいので、サンプルをお願いします。



Haku

リンク

2010/12/5(Sun) 17:57:52|NO.36132

COM操作機能を使うと、ピリオドが無くなる事が分かりました。
熟知していな点が多々あり、私が作成した記述方法では、
エクセルから検索文字列するのに非常に時間がかってしまいます。(10,000行検索で約30秒)
PCのスペックもあると思いますが、
以下のサンプルより、早く検索できる方法を教えて下さい。

エクセル表(d:直下 ファイル名:test.xls)
項 名前 年齢 合計点数 国語 算数 理科 社会
1 taro 21 400 100 100 100 100
2 jiro 22 380 90 90 100 100
3 saburo 23 340 80 80 90 90
4 hanako 24 320 80 80 80 80
5 kyouko 25 305 70 70 90 75

サンプル(上記エクセル表からkyoukoさんの社会の点数75点を取得する場合)

;
; xlsのデータを取得する
;
myname = "test.xls"
fname = "D:\\"+myname


newcom xlApp, "Excel.Application"
xlApp("Visible") = 0 ; 0=Excelウィンドウは非表示
xlApp("DisplayAlerts") = 0 ; 警告メッセージを表示させない
xlBooks = xlApp("Workbooks") ; Workbooks コレクション取得
xlBooks->"Open" fname ; 指定ファイルを開く
xlBook = xlBooks("Item",myname) ; book取得

xlSheet = xlBook("Worksheets","Sheet1") ; Sheet取得

xlRange = xlSheet("Range","A1") ;Range(セル範囲)

xlCurReg = xlRange("CurrentRegion") ;CurrentRegion(指定したセルを含む、表全体を参照します。)
xlRows = xlCurReg("Rows") ;Rows(行番号)
xlColumns = xlCurReg("Columns") ;Columns(列番号)

sy = 0+xlRows("Count") ; 縦の項目数を取得 Countプロパティはセル領域の行数や列数を取得します。
sx = 0+xlColumns("Count") ; 横の項目数を取得

//名前検索
na_chk = 0
repeat sy:y=cnt
xlCur = xlRange("Offset",y,1) ; X,Yのセルを取得
data = xlCur("Text") ; 内容テキストを取り出す
if data = "kyouko" { ;検索するなまえ
na_chk = 1
}
loop
if na_chk = 0 : dialog"名前が存在しません。":goto *owari

//名前から、X方向へ、必要情報を取得
repeat sx:x=cnt
xlCur = xlRange("Offset",y,x) ; X,Yのセルを取得
data = xlCur("Text") ; 内容テキストを取り出す
if x = 7 : shakai = data : mes "社会:" + shakai
loop
dialog "社会:" + shakai+"点"
*owari
; COMのあとしまつ
delcom xlCur : delcom xlColumns : delcom xlRows
delcom xlCurReg : delcom xlRange : delcom xlSheet
delcom xlBook
xlBooks->"Close" : delcom xlBooks
xlApp->"Quit" : delcom xlApp



info

リンク

2010/12/8(Wed) 04:46:01|NO.36159

 文字列の検索は "range" の "find" メソッドを使用する様です

 VBA excel で 検索すると、色々詳しく知ることが出来ると思います。


onexit *exit // 初期化 newcom xlApp, "Excel.Application" xlApp("visible") = 1 xlApp("displayalerts") = 0 xlBooks = xlApp("workbooks") xlBook = xlBooks("Add") xlSheet = xlBook("Worksheets","sheet1") // データを作成 xlSheet("Range","B1") = "名前" xlSheet("Range","C1") = "年齢" xlSheet("Range","D1") = "合計点数" xlSheet("Range","E1") = "国語" xlSheet("Range","F1") = "算数" xlSheet("Range","G1") = "理科" xlSheet("Range","H1") = "社会" xlSheet("Range","B2") = "高橋" xlSheet("Range","B3") = "今本" xlSheet("Range","B4") = "赤崎坂" xlSheet("Range","B5") = "国上" xlSheet("Range","B6") = "末本" xlSheet("Range","B7") = "楠" xlSheet("Range","B8") = "蛙森" xlSheet("Range","B9") = "草那岐" xlSheet("Range","B10") = "浦島" xlSheet("Range","B11") = "群上" repeat 10,2 xlSheet("Range","C"+cnt) = rnd(20-10)+10 xlCell = xlSheet("Range","D"+cnt) xlCell("Formula") = strf("=sum(E%d:H%d)",cnt,cnt) xlSheet("Range","E"+cnt) = rnd(100) xlSheet("Range","F"+cnt) = rnd(100) xlSheet("Range","G"+cnt) = rnd(100) xlSheet("Range","H"+cnt) = rnd(100) loop // 検索を開始する search = "草那岐" ; 検索する名前 xlFindRange = xlSheet("range" , "B2:B11") // 検索する範囲を設定 xlfind = xlFindRange("find",search) // 検索を開始 if varuse(xlfind) { // 存在すると 1 が返るようである。 xlCellRange = xlSheet("range",strf("H%d", xlfind("row")) ) // "row" で 縦 , "column" で横 の位置が返る。 dialog strf("%sさんの社会の点数は %dです", search , xlCellRange("Value") ) }else{ dialog strf("%sさんのデータは存在しません", search) } *exit xlApp -> "Quit" if varuse(xlBook) { delcom xlBook } if varuse(xlBooks){ delcom xlBooks } if varuse(xlApp) { delcom xlApp } end



KA

リンク

2010/12/10(Fri) 19:34:31|NO.36179

余計な事とは思いますが参考までに。

処理したいファイルが少ないので有れば、CSVで書き出して処理した方が
簡単になると思います。



Haku

リンク

2011/1/29(Sat) 18:44:14|NO.36791

infoさん。その他の皆様、回答ありがとうございます。

解決することができました。
VBA 勉強します。

ご連絡がおくれ、申し訳ありませんでした。



ONION software Copyright 1997-2023(c) All rights reserved.