|
いつもお世話になっております。 エクセルに式を転記して結果をcsvで保存しようとXLSETDATAで作成したのですが、 しろまささんのhpに下記のような掲載されていて、これなら<#DBL>とかもいれる必要もなく シンプルで良いのですが、このような場合はXLSETDATAを敢えて使う必要はないのでしょうか?
//http://siromasa.html.xdomain.jp/uwsc/u_term/ExcelApplication.html // .Range("A1").Formula = "=A2" // 式入力
PUBLIC Excel = XLOPEN("C:\実績.xlsx")
P計算式埋め込み("AS2","=LEFT(A2,4)")//年 P計算式埋め込み("AT2","=MID(A2,5,2)")//月 P計算式埋め込み("AU2","=IF(MID(A2,5,2)*1<=3,LEFT(A2,4)*1-1,LEFT(A2,4)*1)&<#DBL>年度<#DBL>")// & <#TAB>年度<#TAB>")//年度 P計算式埋め込み("AV2","=<#DBL>第<#DBL>&CHOOSE(MID(A2,5,2)*1,4,4,4,1,1,1,2,2,2,3,3,3)&<#DBL>四半期<#DBL>")//四半期 P計算式埋め込み("AW2","=IF(and(MID(A2,5,2)*1>=4,mid(a2,5,2)*1<=9),<#DBL>上半期<#DBL>,<#DBL>下半期<#DBL>)")//前期 P計算式埋め込み("AX2","=LEFT(AI2,2)")//統計コード2 P計算式埋め込み("AY2","=IFERROR(LEFT(AJ2,SEARCH(<#DBL>-*<#DBL>,AJ2)-1),LEFT(AJ2,SEARCH(<#DBL>SZ*<#DBL>,AJ2)-1))")//品番左 Pオートフィル("AS",2,"AY")
EXCEL.ActiveWorkbook.SaveAS("C:\実績.csv",FileFormat:= 6)
PROCEDURE P計算式埋め込み(セル位置,計算式) XLSETDATA( Excel,計算式, セル位置 ) FEND
PROCEDURE Pオートフィル(列アルファベット前,開始行,列アルファベット後) DIM 下終端セル行数 = Excel.Range("A1").end(-4121).ROW() 適用範囲 = EXCEL.Range(列アルファベット前+開始行+":"+ 列アルファベット後 + 下終端セル行数) 開始セル = 列アルファベット前+開始行+":"+ 列アルファベット後 + 開始行 EXCEL.Range(開始セル).AutoFill(適用範囲) FEND
|
No.3441 2017/01/28(Sat) 23:10:52
|
☆ Re: エクセルに計算式を埋め込みたい(XLSETDATAとFormula) / しろまさ |
|
|
私は基本的にIE・XL操作はCOMで行いますので、 Pro版持ってますが、IE・XL関連関数を使うことはありません。好みです。
それと定型文ならPasteSpecialのほうが処理速いですよ。
Dim XL = CreateOleObj("Excel.Application") XL.WorkBooks.Add XL.Visible = TRUE Dim WS = XL.ActiveSheet WS.Range("A2").Value = "20161201" SendStr(0, RePlace(AS2_AY2, "<#CR>", "<#TAB>")) WS.Range("AS2").PasteSpecial TextBlock AS2_AY2 =LEFT(A2,4) =MID(A2,5,2) =IF(MID(A2,5,2)*1<=3,LEFT(A2,4)*1-1,LEFT(A2,4)*1)&"年度" ="第"&CHOOSE(MID(A2,5,2)*1,4,4,4,1,1,1,2,2,2,3,3,3)&"四半期" =IF(and(MID(A2,5,2)*1>=4,mid(a2,5,2)*1<=9),"上半期","下半期") =LEFT(AI2,2) =IFERROR(LEFT(AJ2,SEARCH("-*",AJ2)-1),LEFT(AJ2,SEARCH("SZ*",AJ2)-1)) EndTextBlock
|
No.3446 2017/01/30(Mon) 18:18:16
|
|
☆ Re: エクセルに計算式を埋め込みたい(XLSETDATAとFormula) / しろまさ |
|
|
でも私の場合、計算式は名前定義で行います。管理が楽なので。 当然、名前定義もCOMで作成です^^
Dim XL = CreateOleObj("Excel.Application") Dim WB = XL.WorkBooks.Add XL.Visible = TRUE Dim WS = XL.ActiveSheet WS.Range("A2").Value = "20161201"
// 名前の定義(ワークブックに) With WB.Names .Add(Name:="年", RefersTo:="=1*LEFT($A1,4)") .Add(Name:="月", RefersTo:="=1*MID($A1,5,2)") .Add(Name:="年度", RefersTo:="=IF(月<=3,年-1,年)&<#DBL>年度<#DBL>") .Add(Name:="四半期", RefersTo:="=<#DBL>第<#DBL>&CHOOSE(月,4,4,4,1,1,1,2,2,2,3,3,3)&<#DBL>四半期<#DBL>") .Add(Name:="前期", RefersTo:="=IF(and(月>=4,月<=9),<#DBL>上半期<#DBL>,<#DBL>下半期<#DBL>)") EndWith
SendStr(0, RePlace(AS2_AY2, "<#CR>", "<#TAB>")) WS.Range("AS2").PasteSpecial TextBlock AS2_AY2 =年 =月 =年度 =四半期 =前期 EndTextBlock
|
No.3447 2017/01/30(Mon) 19:11:02
|
|
☆ Re: エクセルに計算式を埋め込みたい(XLSETDATAとFormula) / SEN |
|
|
なんか、凄いものを教えて頂いたような気がします。 以前からあるモヤモヤがすっきりしてきました。
修正するのがすごく大変なのです。 抽出されるデータはどうしてもcsvなので、fgetの方が良いのか、excelなんだから計算式の方が良いのか。どっちもどっちなんです。 なるほど、名前の定義ですか。 確かに.xlsのだけの時は、便利で名前の定義は良く使っています。 uwscに取り込むとは。
Names.Add+SendStr+RePlace+PasteSpecial+TextBlockの組合せですね。 このあたりから、どう質問して良いのかも分からなくなるのです。
uwscのファンとして、是非、分かり易い所に保存して欲しいと思います。
ありがとうございました。
|
No.3448 2017/01/30(Mon) 23:52:35
|
|
☆ Re: エクセルに計算式を埋め込みたい(XLSETDATAとFormula) / しろまさ |
|
|
取り込むというか、なんでもUWSCでやってしまおうとしてるだけというか。。
COMやDELLを使えるUWSCはとても汎用性が高いのでアプリ連携が楽に行えます。 ネックは動作スピードですので日々スピード向上のために研究してます^^ テキスト処理は正規表現を覚えると格段に処理スピードが上がりますので是非トライして下さい。
私の正規表現の習得には、しゅんさんにとてもお世話になりました。 この場を借りてお礼申し上げます。
|
No.3450 2017/02/01(Wed) 09:32:46
|
|
☆ Re: エクセルに計算式を埋め込みたい(XLSETDATAとFormula) / sen |
|
|
やはり、正規表現ですか? csvなんだから、そうですよね。 次回、チャレンジしたいと思います。
ありがとうございました。
|
No.3452 2017/02/02(Thu) 22:26:15
|
|