特定の範囲を置換する

特定の範囲を置換する


Find(keyword)

文字列を指定し、検索で合致するセルを置換する

範囲を指定(Range(X:X)し、Replaceを実行することで、該当キーワードに一致するセルの文字列を指定文字列に置換できます。

以下のサンプルにおいて、「おにぎり」と入力し、セルの移動を行い、その後でReplaceで「パン」に置換しています。

EXCEL = CREATEOLEOBJ("Excel.Application")
EXCEL.visible = True
EXCEL.workbooks.add()
EXCEL.ActiveCell.value = "おにぎり"
EXCEL.ActiveCell.Offset(10,10).Select
A = EXCEL.Range("A1:J10").Replace("おにぎり","パン")

複数の箇所が置換されるか確認する

上記のスクリプトでは、一瞬のうちに処理が完了してしまうので、本当に挙動したかわかりにくいです。
次のスクリプトで、メッセージによる処理のコメントを行い、複数セルの一斉処理が出来るか確認してみましょう
これで処理の流れがわかりやすくなると思います。
スクリプトは下記のようになります。

この投稿の続きを読む »

タグ

2012年12月22日 | コメントは受け付けていません。 |

カテゴリー:UWSCとExcel

CSVファイルの改行の削除について

改行のあるカンマ区切りのCSVファイルから、 改行をすべて削除するプログラムを作りたいのですが、 改行が削除できません。
checkfile	="test.csv"
fid= FOPEN(checkfile,F_READ or F_WRITE8)
FOR col = 1 to FGET(fid, -1) //行数分
	linestr= FGET(fid, col)
	linestr= TRIM(linestr,TRUE)
	linestr= REPLACE(linestr, "<#CR>", "") 
	FPUT(fid,linestr,col)
NEXT
FCLOSE(fid)
改行コードは以外にもあるようですが、 、も試してみましたが、 削除できませんでした。 方法はありますでしょうか? よろしくお願い致します。

タグ

2012年6月12日 | コメント/トラックバック(3) |

カテゴリー:掲示板

全角英数のみ半角にする方法

strconvの使い方はわかるのですが、全角英数のみ半角にしたいのですが、そのような方法はあるのでしょうか? str = “あいうえお bcd 139482 カタカナ” をstrconvを使って変換するとカタカナまで半角になってしまいます。 これを防ぎたいと思います。よろしくお願いします。

タグ

2012年5月15日 | コメント/トラックバック(2) |

カテゴリー:掲示板

CHGMOJ、REPLACE

CHGMOJ、REPLACE関数

指定文字列を置換する
戻値 = REPLACE(文字列, 置換したい文字, 置換文字)
もしくは
戻値 = CHGMOJ(文字列, 置換したい文字, 置換文字)
※両関数とも名称が違うのみで、使い方は全く同じです

引数

文字列・・・置換したい文字列が含まれる対象
置換したい文字・・・置換したい文字
置換文字・・・置換する文字

戻値

変換された値
大文字小文字の区別はなし


文字列を置換変換する

文章に含まれる「あなた」を「貴社」と言い換えます。

STR = "それでは、あなたはこの問題についてどうお考えですか"
PRINT REPLACE(STR,"あなた","貴社")
//REPLACEをCHGMOJとしても可

文字の置換が発生しなかった場合は通知する

REPLACE、CHGMOJ関数は文字の置換が発生しなかった場合、
つまり該当の文字列が含まれなかった場合も、
特に通知はせずに、処理を続けます。
この関数には置換した/していないを感知する機能は無いので、
もし置換されたかどうかを知りたい場合は別の関数を使います。
スクリプトは以下の通りです。

この投稿の続きを読む »

タグ

2012年4月30日 | コメントは受け付けていません。 |

カテゴリー:関数一覧

部分的にダブルクォーテーションで括られたCSVファイルを整形したい

部分的にダブルクォーテーションで括られたCSVファイルを整形したい。
具体的には、
aaa,bbb,”ccc,ccc”,ddd,”eee,eee”

aaa,bbb,ccc ccc,ddd,eee eee
のようにしたいです。
アフィリエイトサイトのデータをCSVで落としてくると、

まれにこういった形式になっていることがありますね。

せっかくCSVからHPを作成するシステムを作ったのに、
ダブルクォーテーションに括られているパターンを想定していなかったため、
データがうまくDBに取り込めなかったり、エラーが発生してしまうことがあります。
そして、結局CSVを取り込みやすい形に直すために手間取られてしまう・・・。

そんな状況もUWSCで解決できます。

前提として、UWSCの特殊文字についておさえておきましょう。

< #CR>
改行コードを表す
< #DBL>
ダブルコーテイションを表す
< #TAB>
タブを表す

今回は、カンマとダブルコォーテーションの関係に注目します。
質問のCSVパターンは必ず「,”」で始まり「”,」で括られます。

つまり、「,”」と「”,」に挟まれた文字列を取得し、
その文字列内のカンマ(,)をスペースに置換する作業を繰り返せば良いわけです。

その際に注意しないといけないのは、
ダブルクォーテーションで括られる文字列は、
1行の間に必ずしも1回ではないということです。
無い場合もあるし、複数回ある場合も考えられます。

そこで、IF文WHILE文を使って対応できるようにします。
これらを踏まえて作成した関数は以下の通りです。

////////////////////////////////
//不要なカンマをスペースに変更する関数
//STR:文字列
////////////////////////////////

FUNCTION CANMA(STR)
	CNT = 1
	IFB POS(",<#DBL>",STR)>0
		WHILE POS(",<#DBL>",STR,CNT)

			BFO = POS(",<#DBL>",STR,CNT)
			AFT = POS("<#DBL>,",STR,CNT)
			TGT = COPY(STR,BFO+2,AFT-BFO-2)
			STR = REPLACE(STR, TGT,REPLACE(TGT,","," "))
			CNT = CNT + 1
		WEND
	ENDIF

	RESULT =STR
FEND

解説

CNTは括られた文字列が何個目かを認識します。
最初のIF文の条件で「,”」を検索します。
これにより、括られた文字列のあり無しを判断します。

次のWHILEである限り置換作業を行う命令をします。
その後は一般的な置換作業となります。
TGTを求めるために「+2」「-2」をしているのは、
カンマとダブルクォーテーションの文字数を指しています。

ナカヤマン自身も使っている、CSV置換の構文は以下の通りです。↓↓

CSV整形スクリプト・サンプル:列の削除とカンマ整形とUTF8化

この投稿の続きを読む »

タグ

2012年4月4日 | コメントは受け付けていません。 |

カテゴリー:Q&A

任意の文字列をメモ帳に書き出したい

任意の文字列をメモ帳に書き出したい
メールの送信文であったり、HTMLのテンプレートであったり
任意の文字列を取り扱うことはよくあると思います。

色々なテンプレート文をファイルに保存していると、間違って上書きしたりと
管理が煩雑です。
あらかじめ決めた文章を、その場でメモ帳にパパッと
書き出せるといいのに。
そんな問題をUWSCで解決してみましょう。


SENDSTR(EXEC("NOTEPAD"),"こんにちは!")

一番簡単な解決方法です。
EXEC関数でメモ帳を起動し、SENDSTR関数で文字を送っています。

しかし、これだと、スクリプトを変えない限りは
いつも同じ文言しか送れないという問題があります。
例えばメール文章のテンプレートで、
作成の度に違う名前を差し込みたい場合はこういうスクリプトはどうでしょうか。

この投稿の続きを読む »

タグ

2012年3月3日 | コメントは受け付けていません。 |

カテゴリー:Q&A

このページの先頭へ