セルの中の複数の異なる文字列を以下のように処理したいのですが、Excelの標準の文字列操作の関数で試行錯誤してみたのですが、どうもうまくできませんでしたので、ご存知の方がいらっしゃいましたらご教授ください。VBAで処理しないとできないかもしれませんがよろしくお願いします。
あるリストのC列に備考欄が設けてあり、次のようなデータが入っています。
4/30 みかんを買った(強制改行して)
5/1 りんごを売った
5/2 ぶどうを食べた
5/5 すいかを買った
このセルを調べて、
(1) セル内に"みかん"と"りんご"という文字列があったら、これを取り出して、右隣のセルに表示           (結果)⇒ みかん りんご

(2) セル内に"みかん"と"りんご"という文字列があったら、これを"A","B"に置き換えて、右隣のセルに表示          (結果)⇒ A B

(3) セル内の数値データと"を食べた"、"を買った"、"を売った"を取り除いて、右隣のセルに表示          (結果) ⇒ みかん りんご ぶどう すいか
 
(4) セル内に"か"を含む文字列があったら個数に関係なく"A"に置換して右隣のセルに表示             (結果) ⇒ A
 
すべて取り出したい文字列(上の例ではみかん、りんご)や置換したい文字列(A、B)以外の文字列は全てクリアして表示しないようにします。少し複雑ですが、やり方をご存知の方がいらっしゃいましたら、お教えください。

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

A 回答 (5件)

こんにちは



(1)セル内に"みかん"と"りんご"という文字列があったら、これを取り出して、右隣のセルに表示。「みかん」が複数出てくる場合、その数の分だけ「みかん」と表示。

=REPT("みかん ",(LEN(C1)-LEN(SUBSTITUTE(C1,"みかん","")))/LEN("みかん"))
&REPT("りんご ",(LEN(C1)-LEN(SUBSTITUTE(C1,"りんご","")))/LEN("りんご"))

(2)セル内に"みかん"と"りんご"という文字列があったら、これを"A","B"に置き換えて、右隣のセルに表示。「みかん」が複数出てくる場合、その数の分だけ「A」と表示。

=REPT("A ",(LEN(C1)-LEN(SUBSTITUTE(C1,"みかん","")))/LEN("みかん"))
&REPT("B ",(LEN(C1)-LEN(SUBSTITUTE(C1,"りんご","")))/LEN("りんご"))

(3)セル内の数値データと"を食べた"、"を買った"、"を売った"を取り除いて、右隣のセルに表示

=REPT("みかん ",(LEN(C1)-LEN(SUBSTITUTE(C1,"みかん","")))/LEN("みかん"))
&REPT("りんご ",(LEN(C1)-LEN(SUBSTITUTE(C1,"りんご","")))/LEN("りんご"))
&REPT("ぶどう ",(LEN(C1)-LEN(SUBSTITUTE(C1,"ぶどう","")))/LEN("ぶどう"))
&REPT("すいか ",(LEN(C1)-LEN(SUBSTITUTE(C1,"すいか","")))/LEN("すいか"))

(4)セル内に"か"を含む文字列があったら個数に関係なく"A"に置換して右隣のセルに表示

=IF(COUNTIF(C1,"*か*"),"A","")

 以下のページもご参考になるのでは?

【エクセル技道場】-関数-セル内の単語数カウント
http://www2.odn.ne.jp/excel/waza/function.html#S …

参考URL:http://www2.odn.ne.jp/excel/waza/function.html#S …
    • good
    • 0
この回答へのお礼

janmaさん、ご回答ありがとうございます。関数だけでもこのような処理ができるとは、本当に勉強になりました。janmaさんがご教授くださった関数を解析しようと関数を調べまくりました。その間何度「なるほど~~」と発したことでしょう!!こういう関数の組合せはよく使われる手法なのでしょうか?それともjanmaさんの豊富なご経験からすっと思い描かれるものなのでしょうか?いずれにしても、いろいろ困難なことに突き当たるたびに得るものは大きいなぁと重い知らされました。これからも、1つ1つ解決して知識を身に付けていきたいと思います。本当にありがとうございました。今後もまた何かありましたら、ご教授を賜りたいと思いますので、よろしくお願いします。

お礼日時:2001/05/05 00:52

>april21さんはACCESSは使っていらっしゃいますか?もし使用されているのであれば、このような処理はACCESSでもできるのでしょうか?


殆ど統合ソフトで事足りるので触った程度です。

データベースですから条件を指定して抽出してレポートにすれば良いのでは?

>データが大量なので、やはりデータベース専門のソフトで管理し、必要なデータだけ取り出して、処理する方がいいのでは?
ACCESSでデータベースを作るほどのものなのかはお仕事の内容もわかりませんし
判断できません。

中長期的にデータを集めてそれをベースに必要な情報(条件に該当する)を集める
というのがACCESSに向いてると思います。
(テーブルとか色々決めないといけないので、形をある程度決める必要がある)
そこまでしなくてもその場その場で処理できれば良いのであればexcel。
(形を特に決める必要はない)

私が思ってるだけですから間違っててもお許しを。(私は一般人(^^ゞ)

データベースの方で質問された方が良いのでは?
    • good
    • 0
この回答へのお礼

april21さん、ご回答ありがとうございます。おっしゃるとおり、データベースはテーブルの設計がとても重要だそうですね。将来的にデータをどのような条件で処理するのかはっきりした形が決まってからの方がよさそうですね。当面Excelでがんばってみようと思います。度々厄介なご相談をしてしまうかもしれませんが、気が向いたときなど、どうぞお力をお貸しいただければ嬉しく思います。ところで、april21さんは本当に一般人なのでしょうか???実は凄腕のプロだったりするのでは???(^_^;)今回も早々の御返事本当にありがとうございました。

お礼日時:2001/05/07 23:51

(3)が答えになってなかったので追加


ARC様の関数を使わせて頂いて
E列の条件1に「*買った*」、関数をG列に(右に表示するので関数のC1の部分は
列はFで「*買った*」と同じ行に変更(E4に「*買った*」ならF4に
    • good
    • 0
この回答へのお礼

april21さん、いつも心行き届いたご回答ありがとうございます。これで文字列操作に関する点で、私たちの業務に必要なことはほとんど完璧に対応できます。本当に助かりました。ところで、april21さんはACCESSは使っていらっしゃいますか?もし使用されているのであれば、このような処理はACCESSでもできるのでしょうか?というのもデータが大量なので、やはりデータベース専門のソフトで管理し、必要なデータだけ取り出して、処理する方がいいのでは?という案が出ているのです。もし何かアドバイスなどありましたら、また何かの機会にでもご意見を聞かせていただければ…と思います。今回はどうもありがとうございました。

お礼日時:2001/05/07 00:10

解決されたようなので


前回、書いたデータ処理のVBAを使って
(1)条件1に「*みかん*」 条件2に「*りんご*」C列だから上のセル
  の両方に3を入力するデータ「みかん りんご」
(2)↑と同じで、入力するデータ「A B」
(3)は「編集」-「検索」で"を食べた"、"を買った"、"を売った"をそれぞれ
  検索して置き換えの文字に何も入力しないで「置換」をクリック。
  (これだと元のセルが変えられちゃうけど・・・何かの時にお役立て下さい^_^;)
(4)条件1に「*か*」C列だから上のセルに3を条件2の方は0に
  入力するデータ「A」

いちおう、参加してみました。m(__)m(確かめてません)
    • good
    • 0
この回答へのお礼

april21さん、ご回答ありがとうございます。前回april21さんに作っていただいたプログラムのおかげで仕事が予定よりずっと早く進んでおります。あのプログラムをそれぞれ処理するリストに応じて部分的に書換えて使わせて頂いておりますが、まさかこの文字列処理にも使えるなんて!!でも確かにそうですね。ただ文字列を"取り出す”とか"置換"するという処理的な部分ばかりにしか目が向いていませんでした。早速プログラムを書換えて実行してみました。大成功でした。本当にありがとうございます。april21さんに作っていただいたVBAは、頭を柔らかくして違った角度から検証してみれば、もっといろいろな処理をするのに使用できそうですね。私の"とっておき"のVBAとしてずっと大事に(?)していきます。私の上司はすっかり気をよくしてデータ処理の仕事を私どもにばかりまわしてくるようになってしまったので、これからもExcelでの仕事はどんどん増えそうです。また困難にぶつかると思われますので、ご迷惑だとは思いますが、どうぞお力をお貸しくださいませ。今回もまたまた丁寧なご教授ありがとうございました。

お礼日時:2001/05/05 04:23

(1)


=TRIM(IF(ISERROR(FIND("みかん",C1)),"","みかん ") & IF(ISERROR(FIND("りんご",C1)),"","りんご "))
※ただし、「みかん」が複数出てくる場合でも、1回しか「みかん」と表示されません。
「みかん」の数だけ「みかん」と表示したい場合は、VBA使うしかないと思います。

(2)
=TRIM(IF(ISERROR(FIND("みかん",C1)),"","A ") & IF(ISERROR(FIND("りんご",C1)),"","B "))
※(1)の変形であるため、検索対象が複数存在する場合は(1)と同じになります。

(3)
SUBSTITUTE関数が使えそうなのですが、Excelの仕様で、関数は最大7つまでしかネストできないみたいなので、0→"" , 1→"",…と置換していっても、7まで置換した時点でエラーになります。

VBAで数字を削除する関数「NumKill()」をあらかじめ作成しておけば、以下のような感じで書けると思います。
=TRIM(NumKill(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(SUBSTITUTE(C1,"*1
"," "),"/",""),"を買った",""),"を食べた",""),"を売った","")))
※*1の位置には改行(Alt + Enter)を入れて下さい。

Public Function NumKill(SrcString As String) As String
 Dim i As Long
 NumKill = SrcString
 For i = 0 To 9
  NumKill = Replace(NumKill, CStr(i), "", , , vbTextCompare)
 Next i
End Function

(4)
=IF(ISERROR(FIND("か",C1)),"","A")
    • good
    • 0
この回答へのお礼

ARCさん、早々のご回答ありがとうございます。以前もお力を貸していただきましたね。こちらはなかなか進歩せずで恥ずかしい限りです。本題のほうですが、このようにいくつかの関数を組み合わせれば、VBAだけに頼らずとも複雑な処理がある程度はできるのですね。大変勉強になりました。早速やってみましたが見事に要望とおりの処理が実行できました。大変助かります。さらに数字を削除するVBAまでご教授くださり恐縮です。このVBAはまた別のリストの処理に使用できると思います。実際にあるのです。商品番号に「DoCoMo1234」というようなデータがあって、この数字だけを一気に取りたいというようなことが・・・。本当にありがとうございました。

お礼日時:2001/05/05 00:29

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

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

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

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

Qパワーポイントの置き換えマクロ

パワーポイントのたくさんの単語の文字の置き換えをしたく、自動のマクロ機能で記録したのですが、何度やってもVBAになりません。
どうやったらいいのでしょうか?
同じ用途のマクロをエクセルで作ったのですが、こちらをうまく利用できますか?

業務でいろいろな資料を翻訳ソフトを使って、他国語に翻訳しています。
すべてがうまく翻訳されるわけではなく、辞書登録してもいくつかの単語は毎回同じ言葉に訳されてしまうので、現在は、手作業で置き換え作業しています。
工数がかかってしまうので、マクロ機能で一括置き換えがしたいのです。
よろしくお願いします。

Aベストアンサー

そこからですか。では、もう一度修正コードを全部。
●Excelのワークシートに 置換前 置換後 を下のように並べておいて
   A   B
1 原油 石油
2 空白  白
3 生命 生活

●ExcelでAlt+F11→挿入→標準モジュールに以下を貼り付け

Dim myArr As Variant
Dim VBReg As Object
Dim Matches As Object
Sub Chikann2()
Dim cntRow As Long
Dim myRng As Range
Dim objPPT As Object 'PowerPoint.Application
Dim myPre As Object 'PowerPoint.Presentation
Dim Sld As Object 'PowerPoint.Slide
Dim Shp As Object 'PowerPoint.Shape
Dim myRow As Object 'PowerPoint.Row
Dim myCell As Object 'PowerPoint.Cell
Dim iShp As Object 'PowerPoint.Shape
'A,B列の置換パターン配列に
 cntRow = Range("A" & Rows.Count).End(xlUp).Row
 Set myRng = Range("A1:B" & cntRow)
 myArr = myRng.Value
'パワポ起動
 On Error GoTo Mikidou
 Set objPPT = GetObject(, "PowerPoint.Application")
 With objPPT
  .Activate
  Set myPre = .ActivePresentation
 End With
 On Error GoTo 0
 Set VBReg = CreateObject("VBScript.RegExp")
'図形ループ
 For Each Sld In myPre.Slides
  For Each Shp In Sld.Shapes
   With Shp
    ' 普通のオブジェクトの場合
    If .HasTextFrame Then
     Hennkann .TextFrame.TextRange
    ' 表の場合
    ElseIf .HasTable Then
     For Each myRow In .Table.Rows
      For Each myCell In myRow.Cells
       Hennkann myCell.Shape.TextFrame.TextRange
      Next
     Next
    ' グループオブジェクトの場合
    ElseIf .Type = msoGroup Then
     For Each iShp In .GroupItems
      With iShp
       If .HasTextFrame Then
        Hennkann .TextFrame.TextRange
       End If
      End With
     Next
    End If
   End With
  Next
 Next
Set iShp = Nothing
Set myCell = Nothing
Set myRow = Nothing
Set Shp = Nothing
Set Sld = Nothing
Set myPre = Nothing
Set objPPT = Nothing
Set Matches = Nothing
Set VBReg = Nothing
Exit Sub
Mikidou: MsgBox "パワポファイル開いといて"
End Sub
Sub Hennkann(txtRng As Object) 'PowerPoint.TextRange
Dim i As Long
Dim m As Integer
Dim j As Integer
Dim txtRng2 As Object 'PowerPoint.TextRange
 If txtRng.Text <> "" Then
  '渡されたTextRangeの中から検索置換
  For i = 1 To UBound(myArr, 1)
   If Len(myArr(i, 1)) > 0 Then
    With VBReg
     .Pattern = myArr(i, 1)
     .IgnoreCase = False
     .Global = True
     If .test(txtRng.Text) Then
      For m = 1 To txtRng.Paragraphs.Count
       Set txtRng2 = txtRng.Paragraphs(m)
       If .test(txtRng2.Text) Then
        Set Matches = .Execute(txtRng2.Text)
        For j = Matches.Count - 1 To 0 Step -1
         With Matches(j)
          With txtRng2.Characters(.FirstIndex + 1, .Length)
           .Text = VBReg.Replace(.Text, myArr(i, 2))
          End With
         End With
        Next j
       End If
      Next m
     End If
    End With
   End If
  Next i
 End If
End Sub

そこからですか。では、もう一度修正コードを全部。
●Excelのワークシートに 置換前 置換後 を下のように並べておいて
   A   B
1 原油 石油
2 空白  白
3 生命 生活

●ExcelでAlt+F11→挿入→標準モジュールに以下を貼り付け

Dim myArr As Variant
Dim VBReg As Object
Dim Matches As Object
Sub Chikann2()
Dim cntRow As Long
Dim myRng As Range
Dim objPPT As Object 'PowerPoint.Application
Dim myPre As Object 'PowerPoint.Presentation
Dim Sld As Object 'PowerPoint...続きを読む

QExcelとPowerPointをVBAで連携させる方法

おけましておめでとうございます。
本年もよろしくお願いします。
で、本題ですが、
(Win95でExcel2000とPowerPoint2000を使用)
EXCELのデータベースの表を順々にPowerPointのテキストボックスへ
コピーして印刷するためにVBAを作成したいと思ってます。
(印刷形式がPowerPointのため)
ここには作成できるんですが、両者のVBAをどのように
連携させるかわかりません。
よろしくご教授ください。

また、PowerPointのVBAでマクロの記録を使わず、オブジェクト名
(("Text Box 1")とか)を知る方法もあわせてよろしくご教授ください。

Aベストアンサー

>オブジェクト名はVBAを使わずにパワーポイント上だけでは確認しようが無いと言うことでしょうか。

絶対できないとまでは断言できる自信はないのですが、少なくともその方法は知りません。

オブジェクト名はVBAを使えば変更することはできます。
Application.ActiveWindow.Selection.SlideRange.Shapes.Item(1).Name = "New Name 1"

だだ、この設定した名称が勝手に変更されることはないのかどうか自信がありません。少なくとも自動的に生成した「オブジェクト名」は勝手に変更されてしまいます。

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Qパワーポイントで、スライドごとに1枚の図が入ったスライドが100くらい

パワーポイントで、スライドごとに1枚の図が入ったスライドが100くらいあります。
図の大きさを同じに揃えたいのですが、オブジェクトの書式設定で一枚ずつサイズを指定して配置も指定していますが、いつになっても終わりません。
ワードのキーマクロのように同じ繰り返しを簡単にできる技はないのでしょうか。
教えてください。
パワーポイントのバージョンは、2003と2010(試用版)でやっています。

Aベストアンサー

スライド1枚に画像は1つで、先頭のスライドから画像が入っていると仮定した場合ですが、次のような内容のマクロを実行するのはいかがでしょうか。

[Alt]+[F11]で開くウィンドウの[挿入]-[標準モジュール]で表示される画面に以下を記述したら、そのウィンドウを閉じます。
-------- 次行から
Sub サイズ統一()
 Dim myTop, myLft, myHgt, myWdt, cnt, i
 With ActiveWindow.View.Slide.Shapes(1)
  myTop = .Top
  myLft = .Left
  myHgt = .Height
  myWdt = .Width
 End With
 cnt = ActivePresentation.Slides.Count
 For i = 2 To cnt
  With ActivePresentation.Slides(i).Shapes(1)
   .Top = myTop
   .Left = myLft
   .Height = myHgt
   .Width = myWdt
  End With
 Next
End Sub
-------前行まで

1枚目の画像を好みの位置に好みのサイズで置いてから、[ツール]-[マクロ]-[マクロ]から上記マクロ(サイズ統一)を実行します。

スライド1枚に画像は1つで、先頭のスライドから画像が入っていると仮定した場合ですが、次のような内容のマクロを実行するのはいかがでしょうか。

[Alt]+[F11]で開くウィンドウの[挿入]-[標準モジュール]で表示される画面に以下を記述したら、そのウィンドウを閉じます。
-------- 次行から
Sub サイズ統一()
 Dim myTop, myLft, myHgt, myWdt, cnt, i
 With ActiveWindow.View.Slide.Shapes(1)
  myTop = .Top
  myLft = .Left
  myHgt = .Height
  myWdt = .Width
 End With
 cnt = ActivePresen...続きを読む

QPowerPointで作った図形の名前を変更したい

PowerPointで、図形描画を使い四角を作りました。マクロの記録でそれを選択すると、
ActiveWindow.Selection.SlideRange.Shapes("Rectangle 88").Select
と出て名前が「Rectangle 88」だとわかりました。

この図形の名前を「shikaku1」に変更する事はできますか?
また、マクロの記録を使わずに名前を確認する事はできますか?

Aベストアンサー

図形の名前を確認し必要なら変更するマクロです。
Sub ShNameChg()
 Dim msg, N, shName
 msg = "新しい名前を入力してください。"
 N = ActiveWindow.Selection.ShapeRange.Name
 On Error Resume Next
 shName = InputBox(msg, "現在の名前: " & N)
 ActiveWindow.Selection.ShapeRange.Name = shName
End Sub

> マクロの記録を使わずに名前を確認する事はできますか?
できないと思います。
不便ですね。

Qパワーポイントのリンク管理について

パワーポイントのリンクを一括更新したいのですが何か方法はありますでしょうか?

パワーポイントのファイル中に「XXXXXファイルを参照」という文言を複数箇所に登場させております。
その文言がリンクになっており、参照対象のファイルにとぶこととなっております。
ファイル中の箇所が複数なのでメンテナンスが大変です。

どなたかマクロや置換などで簡単に変更する方法をご存知の方はおられますでしょうか?
お手数ですがよろしくお願いいたします。

Aベストアンサー

Sub hoge()
 Dim sld As Slide
 For Each sld In ActivePresentation.Slides
  Dim hl As Hyperlink
  For Each hl In sld.Hyperlinks
   Debug.Print hl.Address
  Next
 Next
End Sub

(コピペする場合は各行頭の全角スペースを半角スペースにしてください)

このコードだと以下のような出力結果になりました。
(1) 複数のページに対応している。
(2) 1ページ内にある複数のテキストボックス全てに対応している。
(3) 1つのテキストボックス内の先頭から連続する複数のリンクに対応している。

すなわち、
1つのテキストボックスに改行で区切って複数のハイパーリンクを設定してあっても問題ないし、
改行しないで複数のハイパーリンクを設定してあっても問題ないのだが、
ハイパーリンクとハイパーリンクの間に無関係な文字(スペースを含むが改行は含まない)があると、そのテキストボックスの残りのハイパーリンクは処理してくれず、次のテキストボックスに移ってしまう。
これが PowerPoint の仕様なのかなんなのかわかりません。

Sub hoge()
 Dim sld As Slide
 For Each sld In ActivePresentation.Slides
  Dim hl As Hyperlink
  For Each hl In sld.Hyperlinks
   Debug.Print hl.Address
  Next
 Next
End Sub

(コピペする場合は各行頭の全角スペースを半角スペースにしてください)

このコードだと以下のような出力結果になりました。
(1) 複数のページに対応している。
(2) 1ページ内にある複数のテキストボックス全てに対応している。
(3) 1つのテキストボックス内の先頭から連続する複数のリンクに対...続きを読む

QVBA 実行時エラー1004 rangeメソッドは失敗しました。globalオブジェクトのエラー

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義がまずいと思うのですが、それ以上の事は分かりません。どなたか、分かる方がおりましたら、よろしくお願いします。また、プログラムは以下のようになります。

Sub 繰り返し()
'繰り返し
Dim s As Integer
For s = 0 To 17
Range("cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)").Select
Range("cells(8,s+2)").Activate
Charts.Add
ActiveChart.ChartType = xlXYScatter
ActiveChart.SetSourceData Source:=Sheets("20081216_210647").Range( _
"cells(8,1):cells(1580,1),cells(8,s+2):cells(1580,s+2)"), PlotBy:=xlColumns
ActiveChart.SeriesCollection(1).Name = "=""0810p2x"""
ActiveChart.Location Where:=xlLocationAsNewSheet, Name:="0810p2x"
With ActiveChart
.HasTitle = True
.ChartTitle.Characters.Text = "0810p2x"
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "t"
.Axes(xlValue, xlPrimary).HasTitle = False
End With
Next
End Sub

始めまして、VBA初心者のものです。
ただいまエクセルでグラフを作成しています。作業自体は単純作業の繰り返しなのでVBAを用いてやりたいのですが、マクロを実行したときに実行時エラー’1004’rangeメソッドは失敗しました。’_global’オブジェクトとメッセージが出て、実行できません。 デバックをすると以下の5行目で黄色のバーが出ていました。自分なりに原因を考えたのですがrangeの関係するところに、Range("A8:A1587,e8:e1587")というような変数を用いないやり方でやると上手くいくので、変数に関する定義...続きを読む

Aベストアンサー

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな(Excelで表示されている)シートが上位オブジェクトとして、自動的に認識されます。

≪例2≫
Sheets("Sheet2").Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、Rangeのみシート名が記述されています。
Sheets("Sheet2").Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
Activeなシートが、Sheet2の場合はエラーになりません。
しかし、ActiveなシートがSheet2以外の場合、エラーが発生します。
直前に、
Sheets("Sheet1").Select
などとしていれば、ActiveシートがSheet1になっていますから、エラーになります。

Sheets("Sheet2").Range(Sheets("Sheet2").Cells(8, 1), Sheets("Sheet2").Cells(1587, 2)).Select
と書いておけば安心です。
Withステートメントを使えばスッキリ纏めることができます。
With Sheets("Sheet2")
  .Range(.Cells(8, 1), .Cells(1587, 2)).Select
End With

# Sheets("Sheet2")の上位オブジェクトが省略されていることにも気がついてください。

>そこで自分で基礎を勉強したいのですが推薦できる参考書などがござ
>いましたら、教えていただけませんか?
私自身は、入門書程度の雑誌を1冊買っただけです。どれが良いとかはよく分かりません。
「マクロの記録」を活用して、参考コードを取得し、汎用性のあるコードに編集しています。
新しい単語があれば、文字カーソルを単語の上に置き、F1キーを押してVBAのヘルプを必ず見るようにしています。
躓いた時は、Web検索して欲しい情報を得たり、あるいは、こうした掲示板で先輩方のお力をお借りしています。

Excel(エクセル)VBA入門:目次
http://oshiete1.goo.ne.jp/kotaeru_reply.php3?q=4651404
エクセル入門・初級編
http://www.kenzo30.com/excel_kiso.htm

>ご指摘を受けたところを書き換えて回してみた結果、書き換えた箇所
>でエラーがでます。(実行時エラー’1004’’cells’メソッドは失敗
>しました。’global’オブジェクト)
>しかし、何が原因でエラーになるか自分では分かりません。

≪例1≫
Range(Cells(8, 1), Cells(1587, 2)).Select
上記の例では、RangeとかCellsの上位オブジェクトであるシート名が省略されています。
ActiveSheet.Range(ActiveSheet.Cells(8, 1), ActiveSheet.Cells(1587, 2)).Select
というわけです。
マクロ実行時に、Activeな...続きを読む

QVBAで既存のパワポのファイルを開くには?

アクセスやエクセルからVBAで既存のパワポのファイルを開くには?

参照設定をして、
Sub test()
Dim App As PowerPoint.Application
Dim MyFileName As String

Set App = CreateObject("PowerPoint.Application")

MyFileName = CurrentProject.Path & "サンプル.ppt"
App.Visible = True

Set App = Nothing
End Sub

を実行すると、パワポの空のアプリケーション開きますが肝心のファイルが開きません。

開く方法を教えてください。

Aベストアンサー

ExcelファイルやAccessファイルと
パワーポイントのファイルが同じフォルダにあるとして
Accessなら、CurrentProject.Path
Excelなら、ThisWorkbook.Path
でフォルダ名までが得られますので、それに \ を付け足して
CurrentProject.Path & "\" & "サンプル.ppt"

パワーポイントに参照設定を行っているのですから
CreateObjectせずに
Sub PPTopen()
Dim pp As New PowerPoint.Application
pp.Presentations.Open ThisWorkbook.path & "\" & "サンプル.ppt"
以下省略
で。
開くだけで、その後はVBAでパワーポイントを操作しないのであれば
Shell ("explorer.exe" & Chr(32) & ThisWorkbook.path & "\" & "サンプル.ppt"
↑読み取り専用で開かれました。当方 Office2010 の場合
↓PPTファイルをダブルクリックで開いた状態
CreateObject("shell.application").shellexecute ThisWorkbook.path & "\" & "サンプル.ppt"
とかでも。

ちなみにパワーポイントは数年来使ったことはありませんので
これ以上のことはご勘弁ください。

ExcelファイルやAccessファイルと
パワーポイントのファイルが同じフォルダにあるとして
Accessなら、CurrentProject.Path
Excelなら、ThisWorkbook.Path
でフォルダ名までが得られますので、それに \ を付け足して
CurrentProject.Path & "\" & "サンプル.ppt"

パワーポイントに参照設定を行っているのですから
CreateObjectせずに
Sub PPTopen()
Dim pp As New PowerPoint.Application
pp.Presentations.Open ThisWorkbook.path & "\" & "サンプル.ppt"
以下省略
で。
開くだけで、その後はVBAでパワーポイント...続きを読む

Qなぜマクロの記録がなくなってしまったのでしょうか?

なぜオフィス2007のパワポは、マクロの記録がなくなってしまったのでしょうか?

2003のパワポを使っていた時は、
とても重宝していたのですが、なくなってしまって残念です。

あまり需要がなかったのでしょうか?

Aベストアンサー

 ソフトそのものやOSそのものの機能などに関することは
質問しても無駄です。それを開発した会社が何らかの理由でそうしているわけで
一般の人に対して理由を公開することはないでしょう。
 
 おっしゃる通りで、VBAで何かやろうと思ってもそのたびに調べなおさなければいけないので時間がかかりますね。以前に作成しておいたものを見てそこから再利用すると少し楽になります。
 ですが、プレゼンテーションに必要なことはもうほとんどなんでも一般機能でできてしまいます。私なんかがVBAでやっていた機能も2010版ではいくつか取り込まれてしまっています。
 最初に書いた通り理由はわかりませんが、マクロ記録機能をつけるよりもパフォーマンス改善に力を入れたのではないかと思います。2010版でも搭載されていません。

 需要とはあまり関係なく作成者が増えているだけなのかもしれませんが、
私がpowerpoint VBAをはじめてたくさんのサンプルコードを無償公開していた頃に比べると、今では、ネット検索のヒット数は40倍ほど増えています。

Q「いずれか」と「いづれか」どっちが正しい!?

教えて下さいっ!
”どちらか”と言う意味の「いずれか」のかな表記として
「いずれか」と「いづれか」のどちらが正しいのでしょう???

私は「いずれか」だと思うんですが、辞書に「いずれか・いづ--。」と書いてあり、???になってしまいました。
どちらでもいいってことでしょうか?

Aベストアンサー

「いずれか」が正しいです.
「いづれ」は「いずれ」の歴史的かな遣いですので,昔は「いづれ」が使われていましたが,現代では「いずれ」で統一することになっていますので,「いずれ」が正しいです.


人気Q&Aランキング