Excel総合相談所 94

このエントリーをはてなブックマークに追加
952名無しさん@そうだ選挙にいこう:2010/12/22(水) 17:40:35
>>950
=IF(ISERROR(VLOOKUP($A1,シート2!$A:$C,COLUMN(),0)),"",VLOOKUP($A1,シート2!$A:$C,COLUMN(),0))
↑はB、C列に表示させることを想定した式なのでうまくいかないようなら

B列に
=IF(ISERROR(VLOOKUP($A1,シート2!$A:$C,2,0)),"",VLOOKUP($A1,シート2!$A:$C,2,0))
C列に
=IF(ISERROR(VLOOKUP($A1,シート2!$A:$C,3,0)),"",VLOOKUP($A1,シート2!$A:$C,3,0))
とコピーしてオートフィル後値の貼り付け。
953950:2010/12/22(水) 17:46:38
>>951
>>952
ありがとうございます!
あとでやってみます&VLOOKUP勉強してみます。

夜、自宅からだとアクセス規制で書き込みできないので、
結果報告やお礼は休み明け(次スレ?)になってしまうと思います。。。
すみません。
954名無しさん@そうだ選挙にいこう:2010/12/22(水) 20:02:09
文字列が50行くらいあって、それぞれの行につき最初の5文字を消去する(つまり50行すべてて最初の5文字が消える)方法はありますか?
ありそうな気はしてるんですがExcelでできますよね?
特定のソフトじゃなく汎用性のあるExcelでできればそれでしたいです。Wordでもいいけど。

実はこれいがいにも文字列に関するさまざまな操作スキルを学ぶにはどうしたらいいですか?
955954:2010/12/22(水) 20:05:02
データの区切り位置?
956名無しさん@そうだ選挙にいこう:2010/12/22(水) 20:06:36
955ので左端の文字列は消去できました。

こんなスキルって、Excelでもできますかね?例えば右端3文字消去とか
957名無しさん@そうだ選挙にいこう:2010/12/22(水) 20:09:18
例えば数行にわたってA列とB列をコピペすると
ペースト先が「タブで」分断されてるんです。
そのままくっつけるにはどうすればいいでしょうか?
958957:2010/12/22(水) 20:11:19
いまC列に 「=a1&b1」 として、それをオートフィルで下すべて適用して
C列のほうをコピペする方法を思いついたけど
A列B列をコピーした状態で、それをタブじゃなくくっついた状態で着地させる方法ってないものなんでしょぅか?
959名無しさん@そうだ選挙にいこう:2010/12/22(水) 20:31:20
>>954
LENとRIGHTを組み合わせてできる
基本云々に関しては、サイトを端から端まで読めとしか言えない(人によって使う機能が違いすぎるから)
ttp://www.relief.jp/itnote/
ttp://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/itiran.html
ここの二つのサイトはオススメ。
>>957
・一度メモ帳にコピペし、タブを置換、更にコピー
・右クリックでテキストとして貼付け
色々あるよ。エクセル外の文字列置換なんかはベクターでソフトごと探した方が早い場合もある
960名無しさん@そうだ選挙にいこう:2010/12/22(水) 21:19:58
>>958
無理
VBAでクリップボードの内容を書き換えるとか思いつくけど、
それなら最初からデータのコピー自体をVBAでやった方が早いし
961名無しさん@そうだ選挙にいこう:2010/12/22(水) 21:21:02
こんばんは。
果物を仕分けしたら下のようになりました。

りんご 12  青
みかん 11  オレンジ
りんご  5  赤  
ぶどう  4  紫  ってあるとします。

りんごの5個の時の色が赤と出したいのですが、
indexでりんごをA1からA4の間でりんごを探すと青が出てしまいます。
りんごと5個の時の色を出したい時はどういう数式がいいでしょうか?
積とかじゃなくて出来ますでしょうか?

ちなみにエクセル2007です。
962名無しさん@そうだ選挙にいこう:2010/12/22(水) 21:55:27
積っていうか りんごと5を連結したのをキーにしてVLOOKUP()でいいじゃん
963名無しさん@そうだ選挙にいこう:2010/12/22(水) 22:57:15
>959
LENとRIGHTを組み合わせなくても、>943(>942のより簡潔な方法)で示している通り、
MID(元の文字列のセル参照、6)でいけると思います。
964名無しさん@そうだ選挙にいこう:2010/12/22(水) 23:02:51
>>961
>>962の言うようにVlookup用のキーをつくるのが簡単だと思う。
作業列作りたくないならINDEXとMATCH組み合わせる。
あとはDGET関数を使うとかかな。
http://excel.onushi.com/function/dget.htm
965名無しさん@そうだ選挙にいこう:2010/12/22(水) 23:22:47
>>962  >>964 ありがとうございます。
くぐりたくてもその関数が分らないので助かります。とにかくありがとうです!
966名無しさん@そうだ選挙にいこう:2010/12/22(水) 23:31:45
>>965
INDEXとMATCHの組み合わせの場合

A1からC4までデータが入ってるとして
りんご 12 青
みかん 11 オレンジ
りんご 5 赤
ぶどう 4 紫

D1に りんご E1 に 5 と入力
F1に =INDEX(A1:C4,MATCH(D1&E1,A1:A4&B1:B4,0),3)
と入力たあとセル内にカーソルがある状態で Ctrl+Shift+Enter で確定
967名無しさん@そうだ選挙にいこう:2010/12/23(木) 11:17:24
>>966おお、やってみました。
Altキーと間違えていました。上手く行きました。ありがとうです。
968954:2010/12/23(木) 11:48:38
こんにちは

>>959
ありがとうございます。複乳さんですね。調べてみます。

>>963
ありがとうございます。それは便利ですね。やってみます。
969名無しさん@そうだ選挙にいこう:2010/12/23(木) 13:02:12
セル内のある条件を満たした文字列を消去したいのですが、どうすればいいでしょうか?
その条件とは、○○・・・・□□□の部分をいっぺんに消したいんです。・・・は任意の文字で、文字数は決まってません。
具体的にセルを例示すると

01abc0112xyzapple
02abc032xyzorange
03abc00100xyzlemon
04abc010xyzmelon
05abc07xyzstrawberry

のセルたちを

01apple
02orange
03lemon
04melon
05strawberry

にしたいのです。
970名無しさん@そうだ選挙にいこう:2010/12/23(木) 13:32:47
置換で一種類ずつ消してったほうが地道に速いかもね
971名無しさん@そうだ選挙にいこう:2010/12/23(木) 14:30:47
>>969
abc*xyzを置換
もっと条件が複雑ならWordで置換してからコピペという手もある
972名無しさん@そうだ選挙にいこう:2010/12/23(木) 14:34:16
>>971
ありがとうございました!
あっという間にできました。
こんなに簡単だったとは。

うわさに聞いてた*や?のなんて言うんだっけ。ただ置くだけでよかったのですね。
973名無しさん@そうだ選挙にいこう:2010/12/23(木) 14:37:00
いま文字列の作業をしてまして、
下準備として●をあるルールで挿入しました。

そして
●のところは「(1of1)」に、
●●のところは「(1of2)」に、
●●●のところは「(1of3)」に、
●●●●のところは「(1of4)」に、



<続く>

それぞれ置換したいのです。
この文字列は大量にあります。
上記のルールで一括で置換する方法はありますか?
974名無しさん@そうだ選挙にいこう:2010/12/23(木) 14:38:18
さいご●●●●●●●のところは「(1of7)」なので
まあ最悪7回置換すればいいけど、もっと簡単な方法はあるかと思って・・。
975名無しさん@そうだ選挙にいこう:2010/12/23(木) 14:39:15
今後いろんな作業(例えば●が30個がさいごの場合とか)が考えられるので
これを機会にいろんなスキルを学びたいのです。
976名無しさん@そうだ選挙にいこう:2010/12/23(木) 15:21:02
●の数を数えて、それによって数時を返すようにすれば?
かまってちゃんの匂いがプンプンするからあとは黙ってググれ。
977fuku :2010/12/23(木) 16:51:36
>>969
http://www1.axfc.net/uploader/Img/so/103436
A2=01abc0112xyzapple
B1=abc
C1=xyz
B2=FIND(B$1,A2)
C2=FIND(C$1,A2)
D2=LEFT(A2,B2-1)
E2=RIGHT(A2,LEN(A2)-C2-2)
F2=D2&E2

正規表現の置換覚えた方がいいかも
978fuku :2010/12/23(木) 17:14:29
>>973
君の作業はVBA向き。VBA学べばどんな状態になっても解決できる
>>973自体はsubstituteで置換して、LENで何箇所変わったかを取得
あとは>>977みたいに分割してくっつければok
979名無しさん@そうだ選挙にいこう:2010/12/23(木) 17:58:58
>>969
関数でなら
=CONCATENATE(LEFT(A1,2),MID(A1,SEARCH("z",A1)+1,LEN(A1)-SEARCH("z",A1)))
で。


980名無しさん@そうだ選挙にいこう:2010/12/23(木) 19:01:12
【1 OSの種類         .】 WindowsXP
【2 Excelのバージョン   】 Excel2003
【3 VBAが使えるか    .】 はい
【4 VBAでの回答の可否】 可
【5 検索キーワード     】 マクロ メール作成

マクロを使ってOutlookExpressのメールを作成はできますか?

EXCELでマクロ実行

Outlook起動(宛先、題、本文はマクロにより記入済)

手動で添付ファイルつけて送信

といった流れを実現させたいんです。
取りあえず、セルA1に宛先、B1にCC、C1にタイトル、D1〜H1に本文(改行あり)が
入っているものとして、できるのであれば回答お願いいたします。
981名無しさん@そうだ選挙にいこう:2010/12/23(木) 20:39:26
>>972
ワイルドカード
982名無しさん@そうだ選挙にいこう:2010/12/23(木) 20:42:52
2007使っています。

東京都100鈴木とか  北海道函館市500吉田貴子さんとかあるとして
それぞれ100 500とか
数字だけ抜き出すこと出来ますでしょうか?
数字は左から何番目とか決まっていません。
983名無しさん@そうだ選挙にいこう:2010/12/23(木) 20:57:21
>>982
もっと良い式あると思う

=LOOKUP(10^10,RIGHT(LEFT(A1,MATCH(9,INDEX(MID(A1,ROW($A$1:$A$50),1)*1,))),ROW($A$1:$A$50))*1)
984名無しさん@そうだ選挙にいこう:2010/12/23(木) 21:14:39
>>983サンクス しかしあんた凄いなぁ 何でこんな式が出来るんだよw
985名無しさん@そうだ選挙にいこう:2010/12/23(木) 22:23:43
>>984
あ、ごめん
=LOOKUP(10^10,RIGHT(LEFT(A1,MATCH(10,INDEX(MID(A1,ROW($A$1:$A$50),1)*1,))),ROW($A$1:$A$50))*1)
に直して。見てるといいけど。途中の9→10 に変わってる。すいません。
986fuku:2010/12/23(木) 22:47:57
>>980
「OutlookExpress vba 起動」
でぐぐればいくらでも出てくる。特にこれの一番上の検索結果ならセルのvalue当てはめるだけでとっても簡単。
コマンドプロンプト(MS-DOS)使う奴はめんどくさいからやめた方がいい
>>983
すごい。感動した。MIDに配列なのか?式の内容すらあんまりわかんねーぜ^p^
987973, 969:2010/12/24(金) 00:38:25
みなさんレスありがとうございます。

>>976 数える関数ってありましたっけ?調べてみます。そのあとも大変そうだけど。
>>978 substituteとLENの関数を使うことはわかりました。がんばってみます。VBAってそんなに便利なのですか!
>>979 すごい!でも最初数字が一桁しか出てこないのはどこか書き換える必要あり?? そういう手品みたいなマニアックな式ができるようにスキルアップしたいです。

      / ̄ ̄ ̄ ̄ ̄ ̄\
    /             \
   /                  ヽ 
    l:::::::::.                  | 
    |::::::::::   (●)     (●)   | 
   |:::::::::::::::::   \___/     |  
    ヽ:::::::::::::::::::.  \/     ノ
988名無しさん@そうだ選挙にいこう:2010/12/24(金) 03:00:59
うめ
989950:2010/12/24(金) 09:33:37
>>952
できました!すごいです。ありがとうございました!

まだ計算式の仕組みは理解できていないので、
今後応用できるように復習しておこうと思います。
本当に助かりました。ありがとうございました。
990名無しさん@そうだ選挙にいこう:2010/12/24(金) 09:54:46
>>985
後学のために式の意味を教えてくれ
991名無しさん@そうだ選挙にいこう:2010/12/24(金) 11:36:15
元はエクセルで作成したと思われる、
ダブルクォーテーションとカンマで数多く区切られた
テキストがメールで届きました。

これを元のセルに区切られた状態にするには、
エクセルにどのような方法で貼り付ければ良いのでしょうか?
(そのまま貼り付けただけだと、A列だけになってしまいます)
992名無しさん@そうだ選挙にいこう:2010/12/24(金) 12:07:17
>>991
貼り付けたあと区切り位置→カンマ
ダブルクォートは置換で消す
993fuku:2010/12/24(金) 12:17:28
>>990暇なので俺も考えてた。ワークシート分析→数式の検証使うといいぜ
ff23gyという文字列とする。まず、INDEXの中身から見る
index(mid("ff23gy",row($a$1:$a$50),1)*1,)
・row(a1:a50)は1-50の数字を配列で返すために使っている(COLUMN($A$1:$AX$1)でも同じ結果になる)
index(mid("ff23gy",{1;2;3; ・・(中略)・・ 49;50},1)*1,) 
・MIDで1-50文字目を一文字ずつ取り出し、配列で返す。中身は一文字ずつの文字列
index({"f";"f";"2";"3";"g";"y";"";"";・・(中略)・・"";""}*1,) 
・配列の中の文字列それぞれに*1。文字列や""はエラー値となり、数値だけが残る
index({"#VALUE!";"#VALUE!";"2";"3";"#VALUE!";"#VALUE!";・・(中略)・・"#VALUE!";"#VALUE!",) 
・index終わり。MATCH関数で並び替え無いまま第三引数を1にすると、第一引数未満・空白以外の配列の最後にある数字の場所を返す・・のか?エラーも無視するっぽい。で、LEFTでA1を切り出す
=LOOKUP(10^10,RIGHT(LEFT(A1,4),ROW($A$1:$A$50))*1)
=LOOKUP(10^10,RIGHT( "ff23" ,ROW($A$1:$A$50))*1)
・RIGHTは上のMIDと同じ。ROWで配列を返し、RIGHTでも配列を返す。{3;23;"f23";"ff23"}に*1で数値以外はエラーになる
=LOOKUP(10^10,{3;23;"#VALUE!";"#VALUE!"})
・で、これを10^10という大きい数字で検索。やはり配列の後ろから空白以外の数字で10^10未満を検索するようで、エラーも無視してくれる。MAXはエラーを返すのでここで使えない。
→23が返る。お疲れ様でした。
・難しいように見えるが、文字列を配列に格納し、最初と最後の数値をとっていた訳だな。匠の技だな。
ところで"ff03gy"だと03ではなく3だけが返ってくるけど大丈夫か。まぁいいか
994991:2010/12/24(金) 12:18:48
>>992
どうもありがとう!できました!
995名無しさん@そうだ選挙にいこう:2010/12/24(金) 12:27:18
だれか 次スレ たのむ
996名無しさん@そうだ選挙にいこう:2010/12/24(金) 12:28:53
>>990
ROW($A$A1:$A$50)は{1,2,…,50}という配列に展開される
文字列を1文字目から50文字目まで順番に切り取ってみて、
その中からLOOKUPで10^10にもっとも近い数値を検索している
数字そのものは変化しないので、結果的にもっとも桁数の多い状態の物が選ばれる

だから元の文字列が50文字を超えていたり、
含まれる数字が10桁より大きいと結果がおかしくなる
頭にゼロが付いていると文字列としては正確に切り出せない

テスト用データとして「あい12345678うえ」を用意して
10^10の部分を10^5に変えたり$A:$50を$A$5とかに変えてみると
動作の変化がわかるかと
997名無しさん@そうだ選挙にいこう:2010/12/24(金) 12:35:41
Excel2000で「PHONETIC」関数を使うのですが
「結果」として“ひらがな”がでず、入力された漢字になっています。
他に設定する箇所があるのでしょうか?
998名無しさん@そうだ選挙にいこう:2010/12/24(金) 12:37:52
仕事ではみんなに分かりやすい式を書かないとみんなが修正や編集できないから疲れるのよね。
999名無しさん@そうだ選挙にいこう:2010/12/24(金) 12:45:45
Function 数字(s)
  n = 1
  While (Mid(s, n, 1) < "0" Or "9" < Mid(s, n, 1)) And n < Len(s)
    n = n + 1
  Wend

  While "0" <= Mid(s, n, 1) And Mid(s, n, 1) <= "9"
    t = t & Mid(s, n, 1)
    n = n + 1
  Wend
  数字 = t
End Function
>>997
csvとかテキストファイルを読み込んだりデータをExcel以外の所からコピペするとそうなる
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。