セル内の文字列を部分一致で検索したいのですが、
下記の構文だと、検索対象シートを選択しなくてはならないため、
PGの動きが堅くなってしまいます。何かいい方法をご存知の方、
教えてください。

Selection.Find(What:=key, After:=ActiveCell, LookIn:=xlFormulas, LookAt _
:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:= _
False, MatchByte:=False).Activate

Cells.FindNext(After:=ActiveCell).Activate

このQ&Aに関連する最新のQ&A

A 回答 (1件)

>PGの動きが堅くなってしまいます。

・・・

質問の意味を理解しているか疑問ですが、Selectionを問題にされているのでしょうか。
また、検索の進行を制御しないとFindNextだけでは終わらなくなります。

下は検索範囲を選択しないでマクロ内で定義して検索しています。検索文字もInputBoxを使えば任意に指定できます。検索して何を行なうか分からないのでメッセージを出しています。
また、少し変形すれば、複数シートの検索も可能ですね。そういう意味では柔らかくなっている? ご参考に。(Excel97です)

Sub Kensaku()
  Dim schSheet As String '検索シート
  Dim schColumns As String '検索列
  Dim schRg As Range '検索範囲
  Dim schWhat As String '検索文字
  Dim fndCell As Range '検索したセル
  Dim fstRow As Long '検索したセルの行
  Dim fstColumn As Integer '検索したセルの列

  'Sheet1の列A~Cで文字『A』を探す例です
  schSheet = "Sheet1"
  schColumns = "A:C"
  schWhat = "A" '= InputBox("検索文字を入力して下さい。")

  '検索範囲をセット
  Set schRg = Worksheets(schSheet).Columns(schColumns)

  'アクティブセルを検索範囲の使っている最後のセルにする
  Set fndCell = schRg.SpecialCells(xlLastCell)

  '検索開始
  Set fndCell = schRg.Find(What:=schWhat, after:=fndCell, LookIn:=xlFormulas, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, MatchByte:=False)
  '見つかった!
  If Not (fndCell Is Nothing) Then
    '最初に見つかったセルの行、列番号を記憶
    fstRow = fndCell.Row
    fstColumn = fndCell.Column
    Do
      MsgBox "ありました! " & fndCell.Address
      Set fndCell = schRg.FindNext(after:=fndCell)

      '最初に見つかったセルを再度見つけるまで続ける
    Loop Until (fndCell.Row = fstRow) And (fndCell.Column = fstColumn)
  End If

End Sub
    • good
    • 0
この回答へのお礼

ごめんなさいぃ。3つも回答していただいており、すべて良回答
だったのに、ここのサイトの点の渡し方がわからず、質問を
一つ良回答点をさしあげることができませんでした
ごめんなさいm(__)m

お礼日時:2002/01/21 23:47

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q歯を削るときなんで痛く感じるのですか? 歯を削るだけなら痛くないのに

歯を削るときなんで痛く感じるのですか?
歯を削るだけなら痛くないのに

Aベストアンサー

歯は基本的に硬組織と呼ばれる硬い結晶で出来ています。一番表面はエナメル質と呼ばれ この硬い結晶成分のみでできています。この部分は削っても痛みは全くありません。
2層目は象牙質(dentin)と呼ばれやや硬い組織で出来ています。そして歯の中央・最深部は歯髄・いわゆる神経と呼ばれる軟組織(普通の神経・血管組織)となっています。
この2層目の象牙質には 歯髄から細い繊維が入り込んでいてエナメル質直下まで 神経組織が伸びています。従って 歯を削る時にこの象牙質を削ると いっしょに神経組織まで削ってしまう事になり 強い痛みを発する事になるんです。普通 象牙質だけを削るよりも、この神経繊維の末端・つまりエナメル質と象牙質の境目を削る時の方がはるかに強く痛みを感じますねぇ~ 痛みを感じない部分から突然痛みを感じる部分に入った瞬間に急激な痛み・あの独特の痛みがあるわけです。
もちろん 歯を削る時の痛みは、神経だけの問題ではありません。タービンと呼ばれる機器・ドリルによって削る事が多いですが、この切削具の振動・回転する摩擦熱等が歯の知覚組織に伝わる事も痛みの原因となります。最近では、タービンを使わないレーザー光線による切削も多くなり、削る時の痛みは大幅に軽減されています。また、機器の振動を抑える工夫もなされており、機器の振動と似た振動を他の箇所に与える事により、痛みの閾値を上げてしまう(わかりやすく言うと 振動で神経を麻痺させて痛みを感じにくくする事)方法も行われています。

さて、通常の治療で歯を削る時は、神経のある歯(虫歯が小さい場合)や 神経を取る処置の場合、麻酔を使うことがほとんどでしょう。
えまく麻酔が効けば 痛みは全く感じなくなります。ただ、歯科の麻酔は歯の神経を麻痺させねばなりません。歯の神経の出口は 歯の根の先端・つまり骨の中にあるんです。
これを麻酔することはなかなかに難しい事なんです。普通 顎の骨は硬く厚い骨が多く なかなか麻酔薬が内部に浸潤してくれません。かなりの力を入れて圧力をかけないと 硬い骨を通り越してくれませんので、歯科の麻酔はそれだけでも痛いのです(^o^;...この時 骨の厚さによって麻酔が効く効かないが別れますね~
実は同じように 歯のエナメル質の厚さによっても削る時の痛みに差があるのです。例えば同じ歯でも、切端部・先っぽの方はエナメル質が厚いので少々削っても痛みません。逆に根元に近い部分はエナメル質が薄く 象牙質がすぐ直下にあるために痛みが感じやすいと言えます。
また、年齢によっても痛み方に大きな差があります。歯は生えたばかりはまだ幼弱で 歯髄が大きく象牙質が薄いのです。それだけ削る時に神経に近くなってしまい痛みが出やすいですねぇ~
逆に生えてから何十年も経った歯は・・・・つまり老人の歯は 多少削っても痛みません。これは長い間に神経が退化したり象牙質が石灰化して硬化したために 痛みを感じる神経が退化して・あるいは無くなってしまったからです。麻酔を使わずにどんなに削っても 全く痛まないことも しばしばあります。

いずけにしても痛みの感じ方には大きな個人差があります。痛いと感じたなら 左手を挙げて・・・・・ヽ(;^^)/ まぁ、歯科医師にお伝え下さい。

歯は基本的に硬組織と呼ばれる硬い結晶で出来ています。一番表面はエナメル質と呼ばれ この硬い結晶成分のみでできています。この部分は削っても痛みは全くありません。
2層目は象牙質(dentin)と呼ばれやや硬い組織で出来ています。そして歯の中央・最深部は歯髄・いわゆる神経と呼ばれる軟組織(普通の神経・血管組織)となっています。
この2層目の象牙質には 歯髄から細い繊維が入り込んでいてエナメル質直下まで 神経組織が伸びています。従って 歯を削る時にこの象牙質を削ると いっしょに神経組織...続きを読む

QEXCEL関数 セル内の文字列を検索し、その1つ右の文字列を表示する関数

出勤簿 兼 給料計算表 を作っています。

J4セル内の"訪60×"という文字列を検索し、もしあれば"訪60×"のひとつ右の1文字列(必ず数字1文字です)を表示、なければ""(なにもなし)を表示する関数を作っていただけないでしょうか。
何卒よろしくお願いしますm--m

J4セル内:  +訪問
       訪60×2/臨60×0/

Aベストアンサー

失礼。質問タイトルに「EXCEL」とありましたね。
IFERRORは Excel2007からの関数です。

QC言語の文字列?処理 strcpyやlstrcpyなど

C言語は簡単なものが書けるようになりましたが、
全体(C言語の歴史やWindows固有など)を知らないため、まだ右往左往しております。

文字列処理でstrcpyやlstrcpyなどlが付いてないものや付いているものなどがありますが、違いは何でしょうか?

こういうレベルのひとがわかる(歴史や背景・Windows固有)など1冊で解説しているような書籍は無いと思いますが、お勧めのものがありましたら教えてください。

C言語はポインタ取得と言われますが、ポインタだけでなく文字列処理など具体的な例を挙げた、網羅されているC言語(構文でなく利用や応用にに重点を置いた解説書)を探しています。

Aベストアンサー

lstrcpyはWindowsでの「方言」です。
LPTSTR lstrcpy(
 LPTSTR lpString1, // コピー先のバッファ
 LPCTSTR lpString2 // コピー元の文字列
);
C言語にあるstrcpyを拡張したもの、だと思っていいかと。

個人的には教本として「独習C」がいいと思いますが、そう思わない人も居るかもしれません。
K&Rは最近だと嫌われていますが、リファレンスをちょっと見たいときには便利かもしれません。

QExcel日付の部分一致(年月が一致)検索する関数について教えてくださ

Excel日付の部分一致(年月が一致)検索する関数について教えてください。
A列に日付データがあります。
A列が2010年3月だったら、B列に、1003
2010年4月だったら、1004、以下末尾を+1を反映させる関数を教えてください。

A列         B列
2010/3/6 10:23:19  1003
2010/5/6 9:23:19  1005

Aベストアンサー

>A列が2010年3月だったら、B列に、1003、2010年4月だったら、1004、以下末尾を+1を反映させる関数を教えてください。

「以下末尾を+1を反映させる」の意味が良くわかりませんが、4桁の数字で年月を表示するなら以下のような数式になります。

=IF(A1="","",TEXT(A1,"yymm")*1)

Q文字列の後ろから必要分だけ削除したい。

例1 Dim str As String = "あいうえお1234"

文字列の中の1234だけ削除したい場合は、
str = str.Remove(5,4)
という風に、5文字目の後から4文字削除にすればよいのですが、

例の"あいうえお"の部分の長さが毎回処理する度に異なる場合は、
文字列の頭から何文字目という指定ができないので、”後ろから4文字を削除したい”となります。その場合は、どのようなプロパティを使えばいいのでしょうか。

.NET環境です。

Aベストアンサー

Length(str)で文字数を取得できますので、後ろから4文字目は先頭から何文字目かは計算できると思いますが、どうでしょうか?

QExcel VBA ある範囲内で検索条件に一致したデータを入力する

Excel VBA ある範囲内で検索条件に一致したデータを入力する

Excel2003を使用しています。
Sheet2で選択している範囲内のB列のデータがSheet1で選択している範囲内のB列のデータと一致していたら、そのA列のデータをSheet2のA列に入力するというマクロを作成中ですが、うまくいきません…。
Sheet1とSheet2の選択範囲については、このマクロを実行前に都度選択するようにし、A列のデータは日付、B列のデータは数値です。

以前、示していただいたサンプルを参考にコードを書き換えて試していますが、なかなか思うようにいかず、質問させていただきました。
よろしくお願いします。

Aベストアンサー

空欄を回避するシステムが仇になってますね。
乗りかかった船なので、これでどうでしょう?

Sub all_check()
  Dim i As Integer, j As Integer
  For i = 0 To Sheets(1).Range("B65536").End(xlUp).Row - 1
    For j = 0 To Sheets(2).Range("B65536").End(xlUp).Row - 1
      If Sheets(1).Range("B1").Offset(i) = _
          Sheets(2).Range("B1").Offset(j) Then
        Sheets(2).Range("A1").Offset(j) = Sheets(1).Range("A1").Offset(i)
      End If
    Next j
  next i
End Sub

Q歯を削る(レーザー、カリソルブ、水流、ドリル)比較について

【質問・要点】
昨日、インレーが取れました。そこで、少し削って新しいインレーを入れると思うのですが、以下4つを考えたのですが、いったい、どれが最も良い治療法なのでしょうか?

レーザー
カリソルブ
水流で削る
ドリルで削る

【一応私が考える判断基準】
最も歯を削る体積が小さい治療法、
術後、2次齲蝕が最も少ない治療法
最も痛くない治療法

他に、もっと良い治療法やアドバイスがあれば、ご教示、何卒、宜しくお願い致します。

Aベストアンサー

歯科医です。
>レーザー
>カリソルブ
>水流で削る
>ドリルで削る
沢山質問されていますが
ここでまとめて。
まず、レーザーでインレーが入れられるほど削るのはできないです。削除量が圧倒的にすくなくて、綺麗な形態に削ることができないから。
カリソルブも同様です。
水流で削るのは歯に対して現在そういう器具はありません。
ドリルで削る・・・・ドリルというのは恐らくエアタービンもしくはエンジンのどちらかをさしておられる
のでしょうか。タービンで削ることが一番でしょうね。

インレーがはずれたのではなく
新しい虫歯であるのなら削除量のことを考える余地があります。しかし
何分にもすでにインレーの体積分は歯が失われているので
削除量を少なくする事に意義は見出せません。
さらに虫歯になっていなければ大抵の場合はほとんど削らなくてもよいでしょう。
取れたところがさらに虫歯になっているのであれば
削除量云々言う前に
虫歯をとりさることが肝要です。二次カリエスにならないためにはこれがもっとも大切なことです。
痛くない治療法・・・は麻酔を的確に使用して治療することでしょう。

それから
インレーはわりと易しい技工物ですので
一般的なレベルの技工士さんであれば
十分な適合の良いきれいなインレーを作りますよ。

異種金属が口腔内にあることの是非は討論の余地があるのですが
一般的に言って
接しているところでなければ
大きな問題はおきないです。
接するところではそこに小さな電池ができるようなものなので
電流が流れます。

それよりなにより
一日も早く治療を受けてください。
放置しておくことに良い点は一つもありません。

歯科医です。
>レーザー
>カリソルブ
>水流で削る
>ドリルで削る
沢山質問されていますが
ここでまとめて。
まず、レーザーでインレーが入れられるほど削るのはできないです。削除量が圧倒的にすくなくて、綺麗な形態に削ることができないから。
カリソルブも同様です。
水流で削るのは歯に対して現在そういう器具はありません。
ドリルで削る・・・・ドリルというのは恐らくエアタービンもしくはエンジンのどちらかをさしておられる
のでしょうか。タービンで削ることが一番でしょうね。

イン...続きを読む

QEXCEL 条件付書式設定で、特定のセルと部分一致するセルに色をつけたい

こんにちは。
現在EXCELである表を作成しており、条件付書式設定がうまくいかず困っております。

まずD10セルにはドロップダウンリストを作成し、MS、IWなどキーワードとなる記号が選択できるようにしてあります。
そしてセルF2~X2にはMSW318、MSY810、IWJ129、IWH507などといったコードが入力されています。
今回の質問はD10にリストから「MS」を選択(入力)すると、セルF2~X2で「MS」で始まるコードを含んだセルのみを黄色くするという書式を設定する方法です。
簡単だと思ってやってみたのですがなかなかうまくできず、今のところ「=COUNTIF($d$10,"*MS*"」といった具合に個々の文字を指定して応急措置を取っています。しかし将来的にコードの種類は増えていくので、毎回こうして足していくのは大変なので、なんとかひとつの式で対応できる方法を探すことにしました。
わかりにくい質問で恐縮ですが、どなたか教えていただけないでしょうか。
ぜひよろしくお願いいたします。

Aベストアンサー

取り敢えず表を作って大体こんなものかなぁ~と・・・。
添付画像を参照してくださいね。
セルF2~X2と書いてありましたが、範囲は特に関係ないのでF2~N2までしか作成しておりません。
excelのバージョンが掛かれておりませんので、excel2010での条件付き書式設定方法になります。

添付画像をもとに手順とそれに合う数式を教えます。
①セルF2~N2までを選択(貴方の場合はF2~N2までです)
条件付き書式の設定。
① 条件付き書式から「新しいルール」をクリック。
② 「数式を使用して、書式設定するセルを決定」を選択。
③ 数式を入れる欄に =$D$10=LEFT(F2,2 ) の式を入力し、「書式」から塗りつぶしの色を決定。
④ あとは「OK」で条件付き書式を完成させます。

セルD10設定したドロップダウンを変更すると一致するセルの色が変わります。

QC言語で取得した文字列を、C++の文字列として取り扱いたいです。

C言語で取得した文字列を、C++の文字列として取り扱いたいです。

皆さんこんにちは。

C言語で取得したchar型で定義された文字列を、
C++の「std::string」に渡したいと思っております。
どうすればかなうでしょうか?
具体的には次のような内容です。

■C言語側
----
char key1 = "deperture";
----

■C++側で「key1 = key2」としたいです。
----
std::string key2 = key1;
----

C言語側で記述されている「key1」の値(deperture)を、
C++ソース内の「key2」に渡したいと思っています。

こうゆう場合、どんな方法をとれば適切でしょうか。
C言語側でのchar型の文字列の値を、
C++側の「std::string」型として
C++のソースへ渡す方法が分からないです。

アドバイスいただけるとありがたいです。
簡単な例を頂けると更に大変ありがたいです。

以上どうぞ宜しくお願い致します。

C言語で取得した文字列を、C++の文字列として取り扱いたいです。

皆さんこんにちは。

C言語で取得したchar型で定義された文字列を、
C++の「std::string」に渡したいと思っております。
どうすればかなうでしょうか?
具体的には次のような内容です。

■C言語側
----
char key1 = "deperture";
----

■C++側で「key1 = key2」としたいです。
----
std::string key2 = key1;
----

C言語側で記述されている「key1」の値(deperture)を、
C++ソース内の「key2」に渡したいと思っています。

...続きを読む

Aベストアンサー

> char key1 = "deperture";

本当にこれであっていますか?

char key1[] = "deperture";

ではないですか?
そうだとした場合、C++側では、

extern "C" char key1[];
std::string key2(key1);

とすればよいかと思います。

QExcel マクロ VBA セル内で改行された文字列の分割

はじめまして。
ExcelのVBA初心者で、ちょっと困っています。

(例)
(1) セルA1に以下のような改行された文字列が入力されています。
【セルA1】
a
aa
aaa
b
bb
bbb

(2) セルA1内の文字列を3行毎に分割し、セルA2以降に表示させたい。
【セルA2】
a
aa
aaa
【セルA3】
b
bb
bbb

※ 今回の例ではセルA1に6行しかありませんが、実際に行数は決まっていません。

そこで以下のようなVBAを見よう見まねで作り、1行毎の分割はうまくいったのですが、『3行毎に分割』ができません。

Sub 分割()
Dim A, B, C
A = Split(Range("A1"), Chr(10))
B = 0
For Each C In A
B = B + 1
Range("A2").Offset(B - 1, 0).Value = C
Next
End Sub

ご教授いただけると助かります。
よろしくお願い致します。

Aベストアンサー

Sub 分割()
Dim A, B, C, E
A = Split(Range("A1"), Chr(10))
B = 1
E = 1
For Each C In A
If E = 1 Then
Range("A2").Offset(B - 1, 0).Value = C
Else
Range("A2").Offset(B - 1, 0).Value = _
Range("A2").Offset(B - 1, 0).Value & Chr(10) & C
End If
If E = 3 Then
B = B + 1
E = 0
End If
E = E + 1
Next
End Sub

でどうでしょう。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング