随時更新 SAP Script

2099年03月19日 | コンピュータ系

日付をカレンダーから取る

Date set by calendar

日付対象のIDで、

.setFous

.carePosition=0

SendVkey 4

session.findById("wnd[1]/usr/cntlCONTAINER/shellcont/shell").focusDate = "20200120"
session.findById("wnd[1]/usr/cntlCONTAINER/shellcont/shell").selectionInterval = "20200120,20200120"

 

VBAにはTEXT関数がないので、Format関数を当て込む

Format(medium, "YYYYMMDD")

 

VBAのはSEARCH関数がないので、InStr関数を使う

InStr("ABCDE","D")

 


うわさのwindows7をインストールしたが、、遅い!

2010年01月05日 | コンピュータ系
大連に戻ってきました。
先日日本にいるときに買った本物のwindows7 home editionをインストールしました。
vistaを7にアップデートです。
これで、晴れてvistaのスローライフから開放されるに違いないと、最高の期待を持ちつつ、作業スタート。
まあ、インストール作業に数時間かかったけど、これは仕方ない。
だって、OSを書き換えているんだから、それは大掛かりな作業でしょう。
で、起動。

あれ、

なんか遅いけど

最初だからかかなと思い、再起動。
でも、
やっぱり遅い、、
これは、もしかして。

騙された?

7にしたからかどうかはわからないですが、
itune storeに接続できなくなりました。
storeはいいんだけど、podcastにも接続できなくなって、
パソコンを買った意味なし って感じ。
CPU使用率がずっと100%なのも気になる。そのままにしておくとオーバーヒートするかな。

とりあえず、今日はいいことなし。
近々、vistaに戻すかな。

青空文庫を中国語携帯で読むために作った日中変換マクロ

2009年11月03日 | コンピュータ系
読書の秋ですね。

というか秋を通り越して冬見たく寒くなっているところもあるようですが、体調管理には気をつけなければなりません。

本好きの私、中国暮らしが長くなると、日本語の本を読みたくなるのですが、
気軽に行ける本屋などなく、日本に帰国するチャンスにどっさり買い込んでくるようにしています。
ただ、そうはいっても、なかなかお金にも輸送コストにも限界があるので、できれば電子化したいところです。

私たちのような海外勢の強い見方として、「青空文庫」があります。著作権が切れた本をボランティアがtxt化してアップロードしているサイトです。ダイソーの100円の文庫本もここからダウンロードして作っているようです。
私はそれを中国の携帯電話で読みたいと思いました。
私の携帯電話は、USB経由でtxtファイルを読み込みことができます。
しかし、私の携帯電話のバージョンが余り新しくないせいなのか、日本語の漢字は文字化けします。

例えば、
「東京」は「东京」と書かなければ、「□u京」のように文字化けするのです。

これを解消するには、txtの段階で、日本語漢字を中国語漢字(簡体中国語)に直す必要があります。

そのために開発したのが、下記マクロです。

Sub JA_to_CN_CONVERTION_MACRO()

Sub 桁数あふれ修正()
の二部構成で、
先にSub 桁数あふれ修正()で900文字以上のものを900文字にそろえてから、
Sub JA_to_CN_CONVERTION_MACRO() で日本語漢字を簡体中国語に置き換える。

ひとつのセルに911文字以上入っていると、エクセルの「置換」機能がうまく働かないことが判明したので、このようなステップをとることにしました。
さっき、やっと桁あふれ修正部分が完成したので、ブログにupします。


あらかじめ、シート「list」にこんな表を用意しておく必要がある。
問題は、このリストをいかに充実しておくかである。
もし、リストに載っていない漢字があると文字化けする必要がある。。。



シート「TEXT」には下記のように貼り付けます。

-------------------------------
Option Explicit


Sub JA_to_CN_CONVERTION_MACRO()
'2008-06-22 VERSION 0.1 BY YOICHI SANO

'非表示機能
Application.ScreenUpdating = False

Dim JAPANESE As String
Dim CHINESE As String
Dim i As Integer ' COUNTER
Dim lastrow As Integer 'LASTROW

'LASTROW
Sheets("list").Select
lastrow = Cells(1, 1).End(xlDown).Row


For i = 1 To lastrow
Sheets("list").Select
JAPANESE = Cells(i, 1)
CHINESE = Cells(i, 2)

Sheets("TEXT").Select
Cells.Replace What:=JAPANESE, Replacement:=CHINESE, LookAt:=xlPart, SearchOrder _
:=xlByRows, MatchCase:=False, SearchFormat:=False, ReplaceFormat:=False




Next i

'INDICATOR表示を削除
Application.StatusBar = False


MsgBox ("COMPLETE")


End Sub
--------------------------------------------------------------
Sub 桁数あふれ修正()

Dim k As Integer ' 変換シート用列カウンター
Dim r As Integer '追加する列を計算するようのカウンター
Dim t As Integer '追加するテキストを分解するときの列カウンター
Dim text_lastrow As Integer ' textシートの最終行


'text_lastrow

Sheets("TEXT").Select
Cells(1, 1).Select
text_lastrow = ActiveCell.SpecialCells(xlLastCell).Row

For k = 1 To text_lastrow
If Len(Cells(k, 1)) > 900 Then
r = Application.WorksheetFunction.RoundUp(Len(Cells(k, 1)) / 900, 0)
 'Application.WorksheetFunctionがないと、roundupが作動しない


'列の追加
Range(Cells(k + 1, 1), Cells(k + r, 1)).Select
Selection.Insert Shift:=xlDown

'長い文書の分解
Cells(k + 1, 1) = Left(Cells(k, 1), 900)

For t = 2 To r
Cells(k + t, 1) = Mid(Cells(k, 1), 900 * (t - 1) + 1, 900)
Next t
'列の削除
Range(Cells(k, 1), Cells(k, 1)).Select
Selection.Delete Shift:=xlUp
text_lastrow = text_lastrow + r
End If

Next k


End Sub

エクセルExcel関数vlookupでTRUEにしたときの挙動について。当時の販売価格が算出できるか

2009年08月21日 | コンピュータ系
vlookup関数について、少し研究してみた。

あなたは小さな商店を経営しています。
お客様から注文をいただいたものをお届けする小売業です。
商品の価格はお客様が発注した日時点の価格を適用するものとします。

当時の販売価格がいくらだったのか過去の帳簿を確認しています。


表1は商品名とその価格です。例えば、林檎は、5月1日から170円、その後値下げがあり、6月1日からは150円、7月1日からさらに値下げで138円です。他の商品も同様に考えます。
表2は、商品名と発注日があります。これらの適切な価格を埋めるのが今回の問題です。

さて、ここでVlookup関数を使います。
vlookup関数についての基本的な説明は他のページに譲るとしまして、
ここでは、今まで個人的に使ったことがない、=vlookup(xx,xx:xx,9,TRUE)を使ってみることにしました。



まず、表3は表1を価格で並び替えたケースです。


今回vlookup関数を掛けるにあたり、二つの組み合わせを考えました。
結合A=有効日&商品
結合B=商品&有効日

見た目では日付が入っていますが、
結合してみるとシリアル値に化けますので、
「399995林檎」というようになります。

[価格式A]
例えば、セルI23の式は、
=vlookup(H23&G23,$A$23:$D$34,4,TRUE)
つまり、I列はvlookup参照元として、「結合A」のA列を利用します。

[価格式B]
例えば、セルJ23の式は、
=vlookup(G23&H23,$B$23:$D$34,3,TRUE)
つまり、J列はvlookup参照元として、「結合B」のB列を利用します。

緑色のセルは正しい金額が反映している部分、
白色は誤りです。

上記表3,4のケースですと、
vlookup参照元の列の並び替えが正しくされていないため、
正しい金額が反映されません。



次に、表1を製品名で並び替えたものが表5です。



製品名で並び替えるということは即ち、
結合Bの列(B列、製品名&発注日)で並び替えることと同等の意味です。
結果、価格式B の価格はすべて正しくは反映されました。



最後に、表1を有効日で並び替えました。
表7になります。


先ほど、製品順で並べた表5.とその結果表6はうまくいったのに、
有効日順で並べたらうまくいかないのは不思議です。

セルI70以降うまくいっていないようなので、これを見てみます。

H70&G70= 2009/5/10 & 農夫山泉=33945農夫山泉となります。

これをA列から探すと一致するものはないので、エクセルのvlookup関数ヘルプにあるとおり、
「 検索値が見つからない場合に、検索値未満で最も大きい値が使用されます」。ここでいうところの「検索値未満で最も大きい値」というのは、セルA69の「39934咖啡
」となり、それにが相当する価格が510円となります。

つまり、vlookup関数でTRUEを使うときは、参照元となる列の配列についても考慮する必要があります。

また、今回は触れませんでしたが、表2の商品リストにあって、表1の価格リストにない場合も、TRUEの場合は、何かしらの価格が表示されてしまうので、あらかじめより分けておくことが必要です。
また、発注日を有効日以前の日付、例えば4月23日などにした場合も、間違った値が表示されます。このようなケースもあらかじめ取り除いておく必要があります。

何はともあれ、vlookup TRUEはやっかいな関数であることがわかりましたのでshareします。


農夫山泉 とは→こちら