まだVBAはじめたばかりですがよろしくお願いします。
Excel2000を使ってます。以下のことをマクロで行いたいのですが
やり方がわかりませんので教えてください。
あるセル内に「11月15日[晴れ] ○○」という文字列がはいってます。
そのうち[晴れ]の部分だけ([部分から]部分までを)削除した文字列をその隣の
セルにコピーしたいのです。
よろしくご教授お願いします。

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

A 回答 (7件)

早とちりして間違えました。

以下に修正しました。

Public Function fKiridashi(moji As String)
  Dim pot1 As Integer, pot2 As Integer '[と]の位置

  pot1 = InStr(moji, "[")
  pot2 = InStr(moji, "]")
  fKiridashi = Left(moji, pot1 - 1) & Right(moji, Len(moji) - pot2)
End Function

Public Sub sKiridashi()
  Dim rg As Range 'セル
  Dim pot1 As Integer, pot2 As Integer '[と]の位置

  For Each rg In Selection
    pot1 = InStr(rg.Value, "[")
    pot2 = InStr(rg.Value, "]")
    rg.Offset(0, 1) = Left(rg.Value, pot1 - 1) & Right(rg.Value, Len(rg.Value) - pot2)
  Next
End Sub
    • good
    • 0
この回答へのお礼

nishi6様
大変早い対応ありがとうございます
1つのセルに複数の[]ないのものを削除であればループをすればできますよね?
ありがとうございました

お礼日時:2001/11/16 15:18

ユーザー定義関数とモジュールを書いてみました。

(VBAらしく???)

ユーザー定義関数は =fKiridashi(セル) とします。

マクロはセル範囲を選択して sKiridashi を実行します。
選択範囲の隣に「晴れ」とかを切りだします。選択範囲は連続でも飛び離れていてもかまいません。
ご参考に

以下は標準モジュールに貼り付けます。

Public Function fKiridashi(moji As String)
  Dim pot1 As Integer, pot2 As Integer ' [ と ] の位置

  pot1 = InStr(moji, "[") ' [ の位置
  pot2 = InStr(moji, "]") ' ] の位置
  fKiridashi = Mid(moji, pot1 + 1, pot2 - pot1 - 1)
End Function


Public Sub sKiridashi()
  Dim rg As Range 'セル
  Dim pot1 As Integer, pot2 As Integer ' [ と ] の位置

  For Each rg In Selection
    pot1 = InStr(rg.Value, "[")
    pot2 = InStr(rg.Value, "]")
    rg.Offset(0, 1) = Mid(rg.Value, pot1 + 1, pot2 - pot1 - 1)
  Next
End Sub

この回答への補足

nishi6様
ありがとうございます。
[]を含む中身を表示ではなく[]を含む中身を削除したものを表示させたいのです。
でもかなり参考になりました。
もうすこし挑戦してみます。

補足日時:2001/11/16 14:29
    • good
    • 0

こんばんは!



範囲がA2:A10であれば

Sub okikae()
Range("A2:A10").Select
Selection.Copy
Range("B2").Select
ActiveSheet.Paste
Selection.Replace What:="[*]", Replacement:="", LookAt:=xlPart, _
SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
ReplaceFormat:=False
End Sub

こんな感じでしょうか!
    • good
    • 0
この回答へのお礼

comv様 おはようございます
お答えいただきありがとうございます。
この方法でためさせていただいたのですがSelection.Replace以降のところで
エラーになってしまい止まってしまいます。
EXCEL2000では動作しないのでしょうか?
参考にさせていただきもう少し考えてみます。
もし、他にも方法がありましたらご教授お願いします。

お礼日時:2001/11/16 08:35

No.#3のRIO-Freakです。

すみません、訂正です。(No.#3の回答では、セルの指定を間違えた上に、日付の部分が"1月1日"とか"11月1日"とか4文字、5文字の場合、[ ]内が雨や曇りの場合に正しい結果が出ません。)

正しくは、

セルA2に「11月15日[晴れ] ○○」という文字列が入力されているとして、セルB2に

=LEFT(A2,FIND("日",A2))&RIGHT(A2,LEN(A2)-FIND("]",A2))

と入力すれば、

LEFT(A2,FIND("日",A2)) で『11月15日』の部分が取り出され、
RIGHT(A2,LEN(A2)-FIND("]",A2)) で『]』より後ろの部分(『 ○○』の部分。文字数は何文字でもOK)が取り出され、
"&"で結合されます。("&"はExcelで文字列を結合する時に使う演算子です。)

PS.
マクロで行いたいということですが、VBAの勉強のために敢えてマクロで処理したいということなのでしょうか?

この回答への補足

RIO-Freak様
お答えいただきありがとうございます。
また、わかりやすい回答ありがとうございます。
VBAの勉強のためにあえてマクロで行いたいのです。
私の言葉が足りなくて申し訳なかったのですが、
セルに「11月15日[晴れ] ○○[△△]」というように何個か『[ ]』で囲まれて
いる文字列があるのです。それをすべて取り除いたものを隣のセルにコピーしたいのです。そのような場合であればお答えいただいた方法でできますでしょうか?
FINDを利用して『[』部分を検索するのはわかったのですが・・・
よろしくお願いします

補足日時:2001/11/15 23:04
    • good
    • 0

マクロで行いたいということですが、文字列操作関数を使えば、マクロを組むまでもないかと思いますが・・・。



セルA2に「11月15日[晴れ] ○○」という文字列が入力されているとして、セルB2に

=LEFT(A1,6)&RIGHT(A1,LEN(A1)-10)

と入力すれば、

"LEFT(A1,6)"で『11月15日』の部分が取り出され、
"RIGHT(A1,LEN(A1)-10)"で『[晴れ]』より後ろの部分(『 ○○』の部分)が取り出され、
"&"で結合されます。("&"はExcelで文字列を結合する時に使う演算子です。)
    • good
    • 0

置換


【問題】
 B列に以下のように住所を入力しました。

大阪市天皇寺区○○○町一丁目
大阪市天皇寺区○○○町二丁目
大阪市天皇寺区△△△町三丁目

 1000位の住所を入力した後で、「天皇寺区」ではなく「天王寺区」が正しいこ
とに気がつきました。どうやって修正したら良いでしょうか?

大阪市天王寺区○○○町一丁目
大阪市天王寺区○○○町二丁目
大阪市天王寺区△△△町三丁目

【回答】
1.B列を選択
2.Ctrl+H (メニュー[編集]-[置換])
3.[検索する文字列] に 大阪市天皇寺区 と入力
4.[置換後の文字列] に 大阪市天王寺区 と入力
5.[完全に同一なセルだけを検索する] にチェックが入っていないことを確認して
[すべて置換]ボタンをクリック

【解説】
 [すべて置換]を実行する際は、一つのセルだけを選択しているかセル範囲を選択しているかで実行結果が異なります。

 一つのセルだけを選択している場合には、全てのセルが置換の対象になります。

 今回のように範囲を選択してから[すべて置換]を実行すると、その選択した範囲内が置換の対象になります。
    • good
    • 0
この回答へのお礼

PCboy様
回答ありがとうございます。
置換のことは存じておりましたが、VBAのマクロの勉強がてらしてみたかったので
質問してみました。
また、私の言葉が足らず申し訳ありませんでした。

お礼日時:2001/11/15 23:13

置換で文字列削除


【問題】
 B列に以下のように住所が入力されています。全て大阪市天王寺区の住所です。

大阪市天王寺区○○○町一丁目
大阪市天王寺区○○○町二丁目
大阪市天王寺区△△△町三丁目

 これを「大阪市天王寺区」を消して以下のようにするにはどうしたら良いでしょうか?

○○○町一丁目
○○○町二丁目
△△△町三丁目

【回答】
1.B列を選択
2.Ctrl+H (メニュー[編集]-[置換])
3.[検索する文字列] に 大阪市天王寺区 を入力
4.[完全に同一なセルだけを検索する] にチェックが入っていないことを確認して
[すべて置換]ボタンをクリック

【解説】
 上記手順では、[置換後の文字列] に何も入力しないで置換を実行しています。

 [すべて置換]を実行する際は、一つのセルだけを選択しているかセル範囲を選択しているかで実行結果が異なります。

 一つのセルだけを選択している場合には、全てのセルが置換の対象になります。

 今回のように範囲を選択してから[すべて置換]を実行すると、その選択した範囲内が置換の対象になります。
    • good
    • 0

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

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

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

Q(Excel)エクセルのバージョンごとの使用可能関数リストがあるサイト

(Excel)エクセルのバージョンごとの使用可能関数リストがあるサイト

Excel2007でIFERROR関数などを使っていました
しかし、以前のExcelバージョンだと使えないようです。
そこで、どの関数がどのExcelバージョンから使用可能か?
というリストのようなものを掲載しているサイトはありますか?

Aベストアンサー

下記ページで2007で追加された関数が解ります。

Excel(エクセル)基本講座:Excel(エクセル)関数一覧表
http://www.eurus.dti.ne.jp/~yoneyama/Excel/kansu/itiran.html

QOutlookで[全員に返信]をクリックすると、[宛先]と[CC]をす

Outlookで[全員に返信]をクリックすると、[宛先]と[CC]をすべて[CC]に入るように設定。

今までOutlookずっと愛用していますが、現在は最新版のOutlook2010を使用してます。

[全員に返信]をクリックすると、元メールの[送信元]と[宛先]が新メールの[宛先]に変わり、[CC]はそのまま引継ぎますが、元メールの[送信元]と[宛先]と[CC]を全部[CC]に入るように設定などありますか。

または、[送信元]だけを[宛先]にして、ほかはすべて[CC]に入ってもいいですが。

Aベストアンサー

>[全員に返信]をクリックすると、元メールの[送信元]と[宛先]が新メールの[宛先]に変わり、[CC]はそのまま引継ぎます

これって、Microsoftのメールソフトの仕様ですかね。
自分が受信したメールの宛先やCCであっても、Outlook Expressもそうなるようです。

私のメインのThunderbirdでは、自分が複数の宛先やCCに含まれている場合でも、それらの受信メールから「全員に返信」で、受信メールの「送信元」のみが、返信メールの宛先に入り、他の「宛先」や「CC」はすべてCCに表示されます。

>[送信元]だけを[宛先]にして、ほかはすべて[CC]に入ってもいいですが。

この部分での方法は、返信メールの宛先欄で、送信元以外をドラッグして選択して右クリックから切り取り、CC欄に右クリックから貼り付けするしかないと思います。

QExcel関数のようなものはありますか?

こんにちは。まだプログラミングをほとんどしたことがないのでわからないことがあります。

現在Excelを使っていますがExcel関数は非常に使いやすいく重宝しています。
Excel関数は300種類ほどあるそうですが、C++やVB、C#、JAVAなどのプログラムにもExcel関数のようなものが
あらかじめ用意されているのでしょうか?
もしExcel関数の中で使いたいものがあり、そういう関数がソフト側で用意されてない場合は自作するしかないのでしょうか?

Aベストアンサー

office2003以降かつ.Netで作成という話しなら、事実上「ある」に等しいかもしれませんね。

.Netの場合、ライブラリとして読み込む側の言語についてあまり意識する必要はありません。(JAVAで本体のプログラムという訳にはいかないが)
とはいえ、プログラム経験が浅いのでしたら、VB.NETでやるというのが吉であると思います。(関数のみならず、マクロも利用できますのでね/office2003以降)

# 開発環境を安くならC#となります(Borland C#Builderなら無料)

参考URL:https://mypage.borland.co.jp/mypage/index.html?ret_to_semi_list=1&page_act=LI_REG

Q[初心者です]VBAで指定列からAを検索し、発見したら隣のセルに値0を入れるマクロ。

VBAで指定列からAを検索し、発見したら隣のセルに0を入れるマクロを組みたいのですが、組み方がVBA初心者の為わかりません。
(例)
L列に、A、B、C、D、E、Fとランダムに文字が入っていて、
文字Aを検索し、発見したら隣のI列に値0を入れるというマクロです。

Sub Search()
Dim A As String
Set A = Worksheets("Sheet1").Cells.Find("A")
If A Is Nothing Then
ActiveCell.Offset(0, 1).Value = 0

End If
End Sub
と過去の質問で考えてみたのですが、Aがあった時、、、、
とコードが書けないです。
大変困っているので、ご教授頂けないでしょうか?
出来れば、そのままマクロに出来るコードを教えて頂けないでしょうか?
宜しくお願い致します。

Aベストアンサー

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表格が、この「Find」 です。

>Set A = Worksheets("Sheet1").Cells.Find("A")

>過去の質問で考えてみたのです

どうも、Find メソッドは、あるレベル以下の人は、省略する傾向があるようです。何が大事で、何が大事でないかというのは、やってみなければ分かりませんが、検索語だけを入れる書き方は、実務では、あまりしないほうがよいと思います。

だいたい、以下のTestFind2 ぐらいまでに、省略は、とどめたほうがよいです。

それは、Find は、必ずしも自分が思っているデフォルトとは違うことがあるので、「明示的(意図的に)」にオプションは入れたほうがよいです。
例えば、大文字小文字の違いを付けるなら、MatchCase:=True, 数式まで探すなら、LookIn:=xlFormulas

なお、Find メソッドは、5年経っても、たぶん完全に覚えられません。面倒なコードのひとつです。ですが、これはパターンが決まっているので、ひとつパターンが決まったら、それに当てはめればよいだけです。

#3さんで示されているMougのサンプルコードと似てはいるのですが、Mougのサンプルコードでは、Verionによって、失敗することがあります。

'--------------------------------------
'記録マクロをそのまま使う方法
Sub TestFind1()
Dim c As Range
 Set c = Columns("L:L").Find(What:="A", _
           After:=ActiveCell, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           SearchOrder:=xlByRows, _
           SearchDirection:=xlNext, _
           MatchCase:=False, _
           MatchByte:=False, _
           SearchFormat:=False)
 c.Offset(0, 1).Value = 0
End Sub
'--------------------------------------
'TestFind1 をアレンジしてみる
Sub TestFind2()
Dim c As Range
'検索語
Const MYTXT As String = "A"
 Set c = ActiveSheet.Columns("L:L").Find(What:=MYTXT, _
           LookIn:=xlValues, _
           LookAt:=xlPart, _
           MatchCase:=False)
 If Not c Is Nothing Then
    c.Offset(0, 1).Value = 0
 End If
End Sub

'---------------------------------------
'複数ある場合(パターンを使った方法)
'---------------------------------------
Sub TestFind3()
  Dim c As Range
  Dim FirstAdd As String
  Const MYTXT As String = "A"
  Set c = ActiveSheet.Columns("L:L").Find( _
    What:=MYTXT, _
    LookIn:=xlValues, _
    LookAt:=xlPart, _
    MatchCase:=False)
  
  If Not c Is Nothing Then
    FirstAdd = c.Address
    Do
      c.Offset(, 1).Value = 0
      Set c = ActiveSheet.Columns("L:L").FindNext(c)
      If c.Address = FirstAdd Then Exit Sub
    Loop Until c Is Nothing
  End If
End Sub

こんばんは。

#3さんのおっしゃっていることも、もっともなのですが、気になる点がありましたので、自分のことを踏まえて、書かせていただきます。

いずれ、また、同じようなケースが出会うと思います。こんな原則を考えてみたらどうでしょうか?それは、私も自身も同じなのですが、ワークシートのコマンドで行われるものは、記録マクロから作ってみるということです。他にも、「統合」とか、「置換」とか「オートフィルタ」「フィルタオプション」とかは、みんなパターンが決まっています。
その中の代表...続きを読む

QExcel関数について

Excel関数についての質問です。


Excel関数で、実際の仕事上でよく使う関数、ベスト5を教えてください。

また、覚えやすいコツなどがありましたら、教えて頂きたいです。

よろしくお願いします。

Aベストアンサー

うーん…仕事でどういったものを使いたいかによりますが…基本として、

SUM (サム)
指定範囲の合計を出します。
合計はサム!みたいにして覚えました。

--------------------------
IF
if文は結構使いました。
if(A1="","○","×")  ⇒ もし、A1が空なら,○を入力、違うなら×を入力
if(A1="","○",IF(A1="?","△","×")) ⇒ もし、A1が空だったら、○を入力、
                         それ以外で、?が入っていたら△を入力、それ以外は×を入力

とか、色々使えます^^
他の関数とも組み合わせて、とても便利です。

-------------------------
COUNTIF(カウントイフ)
条件にあったものの個数を数えます。

COUNTIF(A1:A5,"正解") 正解と書かれている個数を数えます

--------------------
TODAY
今日の日付が表示されます。
---------------------


他にも、平均を出すものや
便利なものはたくさんあります。
その都度、やりたいことを検索して
使っていくのがベストかな?と思います。
Excelの、挿入⇒関数のところで、
検索もできたはずです。


参考リンク
http://pc.nikkeibp.co.jp/pc21/tech/excel36/
http://matome.naver.jp/odai/2135607317537215601
http://www.enjoy-web-jp.com/jp/excel/excel00.html


また、セルの書式設定のユーザー定義はとても便利です。
書き方を勉強しておくと役立つかもしれません。

以上、参考まで

うーん…仕事でどういったものを使いたいかによりますが…基本として、

SUM (サム)
指定範囲の合計を出します。
合計はサム!みたいにして覚えました。

--------------------------
IF
if文は結構使いました。
if(A1="","○","×")  ⇒ もし、A1が空なら,○を入力、違うなら×を入力
if(A1="","○",IF(A1="?","△","×")) ⇒ もし、A1が空だったら、○を入力、
                         それ以外で、?が入っていたら△を入力、それ以外は×を入力

とか、色々使えます^^
他の関数とも組...続きを読む

Q[ctrl] + [V] で書式無しテキストとして貼り付ける

PowerPoint2002を使用しています。

テキストを [ctrl] + [C] でコピーし、[ctrl] + [V] で貼り付けるときに、書式無しテキストとして貼り付ける方法はないでしょうか?

書式なしテキストとして貼り付けるには、
「編集」→「形式を選択して貼り付け」→「書式なしテキスト」と選択しますが、これでは手間がかかります。
マクロを登録すればよいのかもしれませんが、もっとスマートにできる方法がありましたら教えてください。

Aベストアンサー

こんにちは

私はテキストエディタを別に立ち上げておき,一度そこにペーストしてから再びコピーし
て,パワーポイントにペーストしています.
コピー&ペーストを2回繰り返すことになりますが,[型式を…]をやるよりは楽かなぁ~
と思っています.書式を無くしたいときはいつもこの方法を使っています.

[型式を…]のコマンドをツールバーに入れてしまうという方法もありますが,メニューか
ら選ぶという手間が省けるという程度です.

QEXCEL ゴールシークの関数?

EXCEL ゴールシークの関数?
ゴールシークを画面操作をしなくて ゴールシーク機能を持つ 関数はありませんか?
無ければ 複合関数は? VBを使わないでEXCEL関数だけで 求める方法を探しています。

Aベストアンサー

こんにちは。

例えば、財務関数のNPVなどがありますが、ゴールシークの代わりに、関数だけで、オプションの循環参照計算があります。そうでなければ、基本的な話ですが、微分を使うか、もしくは、ミスが出やすいのですが、オートフィルで、目的の値を探すか、いずれかの方法があると思います。

ただ、VBというか、マクロのことだと思いますが、そういう区分けはあまり意味のないことだと思います。それは、アドインもピボットも、コマンドの3分の1程度は、動的なプログラムを使っているからです。また、分析ツールは完全にExcelの古いマクロです。

私は、マクロを中心とする回答者のひとりです。何かを使わないという条件付き質問は、学校のテストやクイズやお遊びとしてはありえるとしても、ゴールシークというものは、論理的な計算ではなく、反復する時系列な計算です。それは、基本的にマクロにほかなりません。ただし、私たちが考えるよりも、遥かに速い処理です。それを論理的な計算をするというなら、その求める具体的な質問がなければ、話は進みません。解答を求めたいなら、方法論は何でもアリではないかと思います。そうでないなら、純粋に数式で計算させるMathematica のようなもののほうが良いと思います。

こんにちは。

例えば、財務関数のNPVなどがありますが、ゴールシークの代わりに、関数だけで、オプションの循環参照計算があります。そうでなければ、基本的な話ですが、微分を使うか、もしくは、ミスが出やすいのですが、オートフィルで、目的の値を探すか、いずれかの方法があると思います。

ただ、VBというか、マクロのことだと思いますが、そういう区分けはあまり意味のないことだと思います。それは、アドインもピボットも、コマンドの3分の1程度は、動的なプログラムを使っているからです。また、分...続きを読む

QOutlookExpressの[eml]データを[msg]データに

メールデータについて教えて下さい。

通常OutlookExpressのメールデータを保存すると
拡張子が[eml]になりますが、
これをOutlookの[msg]に変換する方法は
ありますでしょうか?

理由は、取引先からメールデータを
[msg]で欲しいといわれたのですが、
私のメーラーはOutlookExpressのため
渡すことができません。

何か良い方法を教えて下さい。

Aベストアンサー

下記のサイトのソフトはいかがでしょうか?

参考URL:http://www.freedownloadscenter.com/Best/eml-convert.html

Qexcelのピボット関数

excelのピボット関数はどんな関数ですか?

Aベストアンサー

私自身は「ピボット関数」なる言葉を聞いたことがないけど、貴方はそれを何処で知ったのですか?
ひょっとして、[データベース関数]の中の =GETPIVOTDATA()関数のことでしょうか?
Excel のヘルプ文をお読みになったら如何でしょ。
>ピボットテーブル レポートに格納されているデータを返します。
>GETPIVOTDATA 関数を使用すると、ピボットテーブル レポートに
>表示されている集計データを取得することができます。
で始まる説明があります。
それを読んでから不明なところを質問されることをお奨めします。
何?隅から隅まで、チンプンカンプン?

Qエクセル表示形式で[DBNnm1][$-FFFF]0となるのは?

アラビア数字を漢数字で表記(9105→九一〇五)するため「表示形式」、「ユーザー定義」で
[DBNnm1]0
と入力(詳しくはないのですが、このサイトで調べてそのようにしてみました)してファイルを保存しましたが、再びファイルを開いたときにそのセルの表示がアラビア数字に戻っており、表示形式が
[DBNnm1][$-FFFF]0
と変わっています。[$-FFFF]の部分は何を表しているのですか?
また、保存時のまま変わらないようにする対処法を教えてください。よろしくお願いします。

Aベストアンサー

「ユーザ定義」で”[DBNum1]G/標準”とやるだと思います。
この場合、9105->九千百五と変換されます。

9105->九一〇五と変換するには、関数を使わないと出来ないのではないでしょうか。

A1のセルに数字が入っている場合、A2のセルに以下の式を書きます。
=NUMBERSTRING(A1,3)


人気Q&Aランキング

おすすめ情報