例えば
http://●●●/●●●/●●●/ikou_20090915/img10453696068.jpg
このようにA1セルに記載がある場合

後ろから/二つ目以降を 別のセルに抜き出したい
(後ろから二つ目の/より前を削除したい)

つまり
ikou_20090915/img10453696068.jpg
このようにしたいのですが、
関数で出来るでしょうか?

困っています。
教えてください。

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

A 回答 (5件)

例えば次の式でもよいでしょう。



=SUBSTITUTE(TRIM(MID(SUBSTITUTE(A1,"/",REPT(" ",100)),500,200))," ","/")
    • good
    • 0

安直ですが、置換では如何でしょうか。


編集→置換→検索文字時列を*/iko、置換文字列欄にiko→全て置換

後ろから/二つ目の文字列がiko以外に沢山あれば関数やVBAになると思いますが、数種ならこの方が簡単です。
    • good
    • 0

 関数で行うのでしたら、



=IF(LEN(A1)-LEN(SUBSTITUTE(A1,"/",))<2,"",MID(A1,FIND("゛゜",SUBSTITUTE(A1,"/","゛゜",LEN(A1)-LEN(SUBSTITUTE(
A1,"/",))-1))+1,LEN(A1)))

或いは、

=IF(LEN(A1)-LEN(SUBSTITUTE(A1,"/",))<2,"",REPLACE(A1,1,FIND("゛゜",SUBSTITUTE(A1,"/","゛゜",LEN(A1)-LEN(SUBSTITUTE(A1,"/",))-1)),))

で良いと思います。
 尚、上記の関数では、含まれている「/」が2つ未満の場合には、2つ目以降には文字が存在しないと見做して、何も表示しない様になっております。
 それから、2番目の関数の中心部分は、ANo.2様のものと殆ど同じですが、SUBSTITUTE関数で「後ろから2つ目の『/』を」置換する際に、置換後の文字列が「\\\」とした場合には、元の文字列中に最初から「\\\」が含まれていると、抜き出しを開始する位置を間違える可能性もありますので、置換後の文字列を、より「有り得ない文字列」である「゛゜」(濁点+半濁点)としています。
    • good
    • 0

=REPLACE(A1,1,FIND("\\\",SUBSTITUTE(A1,"/","\\\",LEN(A1)-LEN(SUBSTITUTE(A1,"/",""))-1)),"")


などで。
    • good
    • 0

VBAで記述して作成。



または

データの「区切り位置」で/を指定すれば右方向のセルに分解されます。
問題は/の個数が同じ(同じ階層)かどうか。
同じなら、右の2列を再度結合するなどすればOK。
異なるなら、「事前に/の数を数えたセルを左側に設けソートしておく」などの工夫が必要。



VBAで記述なら、セパレータを/にしてSplitで分解。
分解した要素数の最大値-1と最大値の2項を/で結合して戻り値とすれば簡単。
    • good
    • 0

このQ&Aに関連する人気のQ&A

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

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

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

Qエクセルで種類を数える関数が無いのは何故?

エクセルで種類を数える関数が無いのは何故なんでしょうか?

エクセルで種類を数えるには、いくつかの関数を組み合わせるのが一般的ですよね?
直接数える関数が無いのは、訳があるんでしょうか?

Aベストアンサー

>>エクセルで種類を数える関数が無いのは何故なんでしょうか?

やっぱり、そういう関数が必要な方が全体からみたら少数派だと、エクセルの開発者たちが考えているからではないかと思います。
また、既存の関数を組み合わせたら、対処可能だから、無理して新しい関数を作る必要性もない、開発の優先順位が低いって判断もあるでしょうね。

私は、エクセルの表を作ったり、エクセルVBAでプログラムを作ったりしますけど、そういう関数が必要になったことが全くありませんし。

Qhttp://okwave.jp/qa/q5634033.htmlにて

http://oshiete.goo.ne.jp/qa/5634033.htmlにて質問させていただきました。その節はありがとうございました。

実はこれは私の質問の仕方が悪かったのですが、ちょっと予想と違うものであったことに気づきました。
本来は以下のようにしたいのですが、ご教示願いたいと思います。

上記URLでのご回答ですと、常に最終の「締」列-J2になってしまいます。
そうではなく、図のように最終の「締」列-最終の一つ前の「締」列が計算されるようにし、常に「締」列には数値が表示されている様にしたいのですが、いかがでしょうか?

ご不明な点や情報不足は補足致しますので、ご指摘下さい。
よろしくお願い致します。

Aベストアンサー

No.3です。

> 常に「締」列には数値が表示されている様にしたい

と、あったので、No.3ではL2にも数値を表示しましたが、質問画像の様にL2を空白にしたいのでしたら、L3に↓を入れて下にコピーしてください。。
=IF(K3="締",J3-SUM(L$2:L2)-J$2,"")

Qエクセルの関数で

エクセルの関数辞典を見ていたら、CUMPRINC関数というのがありました。
しかし、エクセルの「挿入」→「関数」→関数の分類で「財務」というのを選択したのですが、一覧表に載っていません。
どこに載っているのでしょうか?
どうすればこの関数を使えますか?
ちなみにシートの上でやっても関数の反応をしませんでした。

Aベストアンサー

Yahooで検索してみると、参考URLが引っかかりました。

参考になりませんか?

参考URL:http://money-sense.net/doc/20041215_224257.php

Qhttp://oshiete.goo.ne.jp/qa/5843834

http://oshiete.goo.ne.jp/qa/5843834.htmlと同じアクセスの質問です。
現在、開始日や所属コードを入力すると終了日に自動的に”9999/12/31”と入力されるようになっています。その為、社員の勤務先の履歴を更新する時に、前勤務先の終了日を入力する前に現勤務先の所属コードや開始日を入力してしまうと、終了日が”9999/12/31”となります。

一つ目の変更したい点は、上記の後に前勤務先の終了日を入力しても、現勤務先の開始日に反映するようにしたいです。

二つ目は、現勤務先の開始日を入力したら、前勤務先の終了日がその一日前になるようにしたいです。

三つ目は、レコードを削除する時に、終了日から反映させた開始日だけが削除できずに残ってしまうのでそこを変更したいです。

情報不足かと思いますが、宜しくお願いします!!

Aベストアンサー

ご提示の質問の回答者(No.2)です。

上記の際は「次のレコード」とのことでしたが、今回のご質問は「現在のレコード」に
対しての操作、ということのように読めますので、以下、その前提で回答します。
(・・・前勤務先と現勤務先の情報が別レコード、ということではないことを祈ります(汗))

現レコードへの操作や入力済みの値の上書きとなると、既定値では対応できません
ので、値を直接代入してやることになります。
※「三つ目」の現象は、恐らく前回の回答を元に設定された『既定値』が表示された
  ままになっていることを指していると思いますので、対応手段を『既定値(Default
  Value)』から『値(Value)』に変更することで、自然に解消されます。
 (念のため、開始日/終了日のプロパティシートの『データ』タブで既定値の設定を
  確認し、値が残っているようなら削除してください)


「一つ目」と「二つ目」のご要望を単純に実現するなら、コードは以下の通りです:

'「前勤務先終了日」テキストボックスの更新後イベント
Private Sub 前勤務先終了日_AfterUpdate()

  '値を削除した場合は、何もしない  
  If IsNull(前勤務先終了日) Then Exit Sub

  'DateAdd関数を使用して、終了日の1日後を開始日に設定
  '(上の説明にあわせるなら「~開始日.Value」ですが、「.Value」は省略可なので略)
  現勤務先開始日 = DateAdd("d", 1, 前勤務先終了日)

End Sub

'「現勤務先開始日」テキストボックスの更新後イベント
Private Sub 現勤務先開始日_AfterUpdate

  If IsNull(現勤務先開始日) Then Exit Sub

  前勤務先終了日 = DateAdd("d", -1, 現勤務先開始日)

End Sub


但し、これだと、もしも「前勤務先終了日」と「現勤務先開始日」の間に空白期間のある
人がいた場合、入力のしようがなくなってしまいます。

「空白期間は前勤務先の勤務期間に含める」といった運用ルールを置かれているか、
空白期間がありえない前提なら問題ありませんが、そうでないなら、以下のように
「代入先が入力済みの場合は、上書きしてよいか確認する」といった方法もあります。

「前勤務先終了日の入力時は確認なしで上書き、現勤務先開始日の入力時は必要に
に応じて確認」でよいなら、「現勤務先開始日」のコードを以下のものに差し替えます:

Private Sub 現勤務先開始日_AfterUpdate
On Error Goto エラー処理

  '定数の宣言
  Const strMsg As String = "前勤務先終了日は入力済みです。" _
    & vbCrLf & "入力した開始日の前日で上書きしますか?"

  If IsNull(現勤務先開始日) Then
    '現勤務先開始日が空白の場合は、何もしない
    Goto 終了処理
  ElseIf IsNull(前勤務先終了日) Then
    '前勤務先終了日が空白の場合は、そのまま処理を継続
  ElseIf MsgBox(strMsg, vbYesNo, "確認") = vbNo Then
    '終了日の上書き確認で「いいえ」選択時は何もしない
    '(「はい」選択時は、そのまま処理を継続)
    Goto 終了処理
  End If

  '上で「終了処理」に飛ばされていなければ、終了日への代入を実行
  前勤務先終了日 = DateAdd("d", -1, 現勤務先開始日)

終了処理:
  Exit Sub

エラー処理:
  MsgBox Err.Number & ":" & Err.Description, , Me.Name & " 現勤務先開始日"
  Resume 終了処理

End Sub


・・・以上です。

ご提示の質問の回答者(No.2)です。

上記の際は「次のレコード」とのことでしたが、今回のご質問は「現在のレコード」に
対しての操作、ということのように読めますので、以下、その前提で回答します。
(・・・前勤務先と現勤務先の情報が別レコード、ということではないことを祈ります(汗))

現レコードへの操作や入力済みの値の上書きとなると、既定値では対応できません
ので、値を直接代入してやることになります。
※「三つ目」の現象は、恐らく前回の回答を元に設定された『既定値』が表示された
  ままにな...続きを読む

Qエクセルの関数 ネスト

エクセルの関数 ネスト

エクセルの関数で、ネストさせるときがあるとおもうのですが、

関数を内側に書いたらよいのか外側に書いたらよいのか分からなくなる時があります。

エクセルの関数に関してわかりやすく書いてあるページなどありますか。

Aベストアンサー

こんばんは

Excel2003までは、ネストが7まで、2007では64までが可能です。
http://www.google.co.jp/search?hl=ja&source=hp&q=excel+%E3%83%8D%E3%82%B9%E3%83%88%E3%80%802003%E3%80%802007&aq=f&aqi=&aql=&oq=&gs_rfai=

「仕様上は可能」でも、複雑なネストは間違いが生じやすいですし、変更もしにくくなります。「出来るだけネストはしない」「適宜、中間結果をセルに出力する」という方法を採った方が、間違いが少なく、柔軟性のあるシステムになると思います。

>エクセルの関数に関してわかりやすく書いてあるページなどありますか。
関数の個別の機能ならば、Webサイトも書籍も多数あるのですが、「組み合わせて使う」というのはその場その場での発想になってしまうと思います。

QExcel2010のA列に例えば今月の2010/08/01から2010

Excel2010のA列に例えば今月の2010/08/01から2010/08/31迄の日付が書いてあります。
そして例えば今日が2010/08/25だとするとA列の2010/08/25のセルが色が変わったり
何が印が出ると言うことは出来るでしょうか。お尋ねします。

Aベストアンサー

A1セルに日付などの文字があってもかまいません。列番号のAをクリックしてA列を選択します。
A1セルがアクティブセルの状態になっていますね。
そこでエクセル2007ですが「ホーム」タブに有る「条件付き書式」から「新しいルール」を選択します。
「数式を使用して書式設定するセルを決定」を選択して数式の入力する窓には =A1=TODAY() を入力します。同じ画面の「書式」をクリックして「塗りつぶし」のタブから好みの色を選択してOKします。これで本日の日付のセルには色が付くことになります。
以上はエクセル2007ですが2010でも同じような機能があることでしょう。試してみてください。

Qエクセル関数の解読サイトなんてありますか?

エクセル関数の解読サイトなんてありますか?

いつもお世話になっております<(_ _)>

エクセルファイルに関数の入った数式が入力されています。
セルごとに複数の関数が入っていますが、私にはちっともわかりません。

そこで質問です。
こんなとき「エクセル関数を解読」してくれるようなサイトってありませんか?

たとえば検索窓があってそこに「=SUM(S1:S13)」わからなくて困っている関数式を入力。
すると答えの別ボックスに「S1~S13までの数値の合計」と出てくるようなサイト。

それに近いサイトでも良いので知っている方がいらっしゃればぜひ、教えてください<(_ _)>

Aベストアンサー

もし、

=IF(E14="","",IF(O14="",(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1300,(IF(E14>"18:00"*1,"18:00",E14)-IF(C14<="8:00"*1,"8:00",C14))*24*1625))

だったら、どういう文章が出て欲しいのでしょうか?

もしE14が空白だったら、
 空白、
そうじゃなかったから、
 もしO14が空白だったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1300
 そうじゃなかったら、
  (もしE14が18:00より大きかったら18:00、そうじゃなかったらE14)-(もしC14が8:00以下だったら8:00、そうじゃなかったらC14)×24×1625

って感じですか?
数式をそのまま読解したほうが解りやすくないですか?

QExcel関数について教えてください(>_<;)

Excel関数について教えてください(>_<;)

・もし、45と記入したら〇+△の計算をし、もし、25と記入したら〇+□と計算しなさい。

という命令をしたいのですが、IF関数を使うのかもしくは他の計算式でできるのか計算式を教えてください!


あと…行指定の絶対値($)ってどこに入れるのかわかりません(@_@;)
5行ほど同じ計算式を入れたいのですが。。。

助けてください!よろしくお願いします(o*。_。)oペコッ


質問文章うまく書けてなくてすみません。。

Aベストアンサー

いまいち質問内容が判らないのですが…

セルA1に45と入力されたら、セルA2に○+△の結果を表示。
セルA1に25と入力されたら、セルA2に○+□の結果を表示。
という事で良いですか?

それであれば、セルA2に
=IF($A$1=45,○+△,○+□)
と入力すればできると思います。

セルA1に、45と25以外の値が入力される可能性もある場合は、
=IF($A$1=45,○+△,IF($A$1=25,○+□,"その他"))
って感じですかね?

もっとキレイな関数があるかもしれませんが…
意図するものと違ってたらすいません。

Qエクセル関数を、書き写して分析できるツールはある?

タイトルの件、質問します。

エクセルの関数を分析する際に、エクセルの数式バーや、セルに入っている関数を
F2を教えて見るのでは、見にくい場合があります。

現在は、私は、メモ帳に関数をコピーして、分析したり、修正したりしています。
エクセルの機能or他ソフトで、関数を分析できるツールはあるのでしょうか??

【エクセルバージョン】
2003、2007

Aベストアンサー

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利な方法です。
そもそも計算が通っていない(たとえばカッコの対応が間違えていて,Enterしても受け付けてくれないようなミスをしている場合)には使えません。



また,数式バーの中で数式の「中」にカーソルを入れて左右の矢印キーでカーソルを動かしていったときに,「(」や「)」をまたいだ瞬間に,対応する「閉じカッコ」「始まりのカッコ」が色つきで強調表示されるのを確認しながら,カッコの対応がまちがえてないかなどを調べるのも簡易な良い方法です。


あまり使わない方法ですが,数式の中で適宜ALT+Enterを打って「セル内改行」してしまい,数式を縦に分解して書いてみるのも整理しやすい方法のひとつです。

難解な数式を理解したいとき,最も便利に利用できるのは,2003ではツールメニューのワークシート分析にある「数式の検証」です。
2007では数式タブにあります。

メンドクサイ数式のセルで数式の検証を使い,どの関数やどのカッコから計算が進んでいくのかを1ステップずつトレースして理解します。また意図しない結果がどの段階で発生しているのか追跡します。

このやり方は勿論間違った数式(意図しない結果が出てきた場合)を追跡するのにも使いますが,むしろ誰かに教わった「正しい数式」を理解する時に便利...続きを読む

QEXCEL関数/別シートのセル番地をセルの値で指定

お世話になります。
どうしてもわかりません…
エクセル名人の皆様、どうかお知恵をお貸しくださいませ。

Sheet1に下記のようなデータが約5000件あります。
  A  B  C   D … BP  …
1 No. ID. 品目 月日…状況 …
2 1 a33  A  3/4   0   
3 2 a87  B  5/11  1  

このうち、BP列が1のもの約900件のみがSheet2に抽出されています。
(このためのマクロについて前回質問させていただきました)
Sheet2:
  A  B  C   D   E  F  G  …
1 No. ID 品目 月日            
2 2  a87  B  5/11             
3 7  b3  K  2/5
4 18 c44  F  12/1
5 11 r93 J 7/28


ちなみにA列のNo.は1,2,3,…と続く通し番号で、だぶりはありません。

Sheet1のデータの項目数は大変多いのですが、Sheet2にはその項目すべては必要でないため、
Sheet2には上記のとおりAからD列までの必須情報のみ抽出し、
E列以降の情報については、必要な列の情報のみ、
A列の通しNo.で紐づけしてVLOOKUP関数で取得したいと考えています。

しかし、Sheet1の表には空欄があり、これを空欄のまま表示させるために
IF関数を使いたいのですが、
Sheet1の参照元のセルの番地をどう書けばいいでしょうか?
とてもわかりにくくて申し訳ありません…

たとえば、Sheet2のA列が18であれば(上記Sheet2のA4)、
元データはSheet1の19行目にあることになります。 
A列の数値+1、が行番号ということです。

そのK列を参照する場合、
=IF(Sheet1!K19="","",VLOOKUP(A4,Sheet1!A:K,COLUMN(K4),FALSE)
となるかと思うのですが、
このSheet1!K19 というセル番地を、自分で計算して手入力するというのはとても大変なので、
関数などで表現する方法はないでしょうか。
たとえば、Sheet1!K(A4+1) とか書いてみましたが、もちろんこれでよいわけもなく…

不勉強で恐縮ですが、どうしてもわかりません。
どうかご教授ください。
よろしくおねがいいたします。

お世話になります。
どうしてもわかりません…
エクセル名人の皆様、どうかお知恵をお貸しくださいませ。

Sheet1に下記のようなデータが約5000件あります。
  A  B  C   D … BP  …
1 No. ID. 品目 月日…状況 …
2 1 a33  A  3/4   0   
3 2 a87  B  5/11  1  

このうち、BP列が1のもの約900件のみがSheet2に抽出されています。
(このためのマクロについて前回質問させていただきました)
Sheet2:
  A  B  C   D   E  F  G  …
1 No. ID...続きを読む

Aベストアンサー

基本のご質問:
シート1のK列の18+1=19行目は
=INDEX(Sheet1!K:K,A4+1)
で直接参照します。わざわざVLOOKUPする必要「も」ありません。



次のご質問:
>これを空欄のまま表示させるために

K列の内容が「文字列」だった場合は
=INDEX(Sheet1!K:K,A4+1)&""
としておきます。


K列の内容が「数値」で、これを「数値として」計算結果を出しとかなきゃならない場合は
=IF(INDEX(Sheet1!K:K,A4+1)="","",INDEX(Sheet1!K:K,A4+1))
としておきます。

K列の内容が数値でも、結果は「文字列として表示するだけでOK」な場合は、先の&""の方式を利用できます。


人気Q&Aランキング

おすすめ情報