アプリ版:「スタンプのみでお礼する」機能のリリースについて

 顧客情報のマクロを組んでおります。

 2列目  3列目 
 総務課 鈴木一郎
 営業課 山本一郎
 庶務課 田中一郎
 営業課 本田一郎

 …といったデータがあります。
 「総務課」というボタンをおしたら、 
 2行目の中から、「総務課」という文字列を探し出し、
 (オートフィルタの作業そのものなのですが)それ以外の行は「隠す」にしたいと思っております。
 総務課の人間だけを表示するようなマクロにしようと。
 

 これまでオートフィルタを使用したマクロを組んでいたのですが、
 どうもオートフィルタボタンが表示されてしまうと、表が見づらくなるので、美しくありません…。
 そこで、このようなマクロを作ろうと考えました。
 
 とくに「ROW2」から特定の文字列を検索して…
 という下りがわかりません。

 アドバイスをいただけると、ありがたく思います。
 どうぞ、よろしくお願いいたします。
 

A 回答 (4件)

No.1・2です。



追加質問について・・・
>For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
>i は 2から エクセルの最終行までのセル・・・などといった意味でしょうか?
>どうして、ここで2からなのでしょうか?

は質問内に
>2行目の中から、「総務課」という文字列を探し出し・・・
とありますので、データは2行目以降にあるという前提のコードです。

次に
>2 to cells(rows.count, 2)   … 特にここの意味を教えていただけると、応用ができるので助かるのですが…。

この意味は2行目~2列目(B列)の最終行までという意味です。
cells(rows.count, 2)は cells(行番号,列番号)と記述します)

当然
>For i = 2 To Cells(Rows.Count, "B").End(xlUp).Row
にしても同様の結果になります。

A列に関する記述がなかったので、
確実にデータがあるB列に最終行までループさせています。

A列にも必ずデータがある!ということであれば「2」の部分を「1」に変更しても
なんら問題はありません。

この程度で参考になりますかね?m(_ _)m
    • good
    • 2
この回答へのお礼

完璧に、理解できました。
そして、上手くいきました。

ご回答、どうもありがとうございました!

お礼日時:2012/08/27 11:58

>総務課の人間だけを表示するようなマクロ



一番シンプルとしては
sub macro1()
 dim h as range
 for each h in range("B2:B" & range("B65536").end(xlup).row)
  h.entirerow.hidden = h <> "総務課"
 next
end sub

といったカンジで。
でもこんな風に一行ずつ総舐めするのは大変遅いので、リストが長くなってくると全くお勧めしません。




エクセルの機能を使うと、たとえばこんな具合でも出来ます。

1行目にタイトル行
2行目にデータとして

sub macro2()
 dim t as string
 dim c as range

’入力
 t = inputbox("what you show")
 if t = "" then
  msgbox "OUT"
  exit sub
 end if

’準備
 application.screenupdating = false
 rows.hidden = false
 activesheet.showalldata
 set c = activesheet.cells.specialcells(xlcelltypelastcell)

’絞り込み
 cells(1, c.column + 2) = range("B1").value
 cells(2, c.column + 2) = t
 range(range("A1"), c).advancedfilter _
  action:=xlfilterinplace, _
  criteriarange:=cells(1, c.column + 2).resize(2, 1), _
  unique:=false

’片づけ
 cells(1, c.column + 2).entirecolumn.delete shift:=xlshifttoleft
 application.screenupdating = true
end sub
    • good
    • 0
この回答へのお礼

インプットボックスというものの存在を初めて知りました。
このようなマクロを、本当にどうもありがとうございます。

ただ…上手く行きませんでした…。
その後のいろいろな数式も、にわかには理解できず…
もう少し勉強を積んでから、再チャレンジしようと思います。

ご回答、どうもありがとうございました!

お礼日時:2012/08/27 11:58

No.1です!


たびたびごめんなさい。

前回のコードで間違いがありました。

>If Cells(i, 2) = "総務課" Then
の行の等号を不等号にして
>If Cells(i, 2) <> "総務課" Then

に訂正してください。
前回のコードでは「総務課」の行が非表示になってしまいます。

何度も失礼しました。m(_ _)m
    • good
    • 0
この回答へのお礼

 了解です。
 ありがとうございます!
 
 補足の質問についてですが、
 意味はまだわかりませんが、とにかく応用はできました!

 ご回答、どうもありがとうございました!

お礼日時:2012/08/27 08:25

こんにちは!



結局オートフィルタのような操作がご希望でオートフィルタの下向き▼を表示したくない!
というコトですよね?

一例です。

Dim i As Long
For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row
If Cells(i, 2) = "総務課" Then
Rows(i).Hidden = True
End If
Next i

こんな感じではどうでしょうか?

※ このままでは行が非表示のままですので、別マクロとして

Sub 再表示()
Rows.Hidden = False
End Sub

といった再表示のマクロを準備しておいた方が良いと思います。
参考になりますかね?m(_ _)m
    • good
    • 0
この回答へのお礼

どうも、補足までいただき、ありがとうございます!

恐れ入りますが、
この数式の意味を、解説していただくことはできますでしょうか?

For i = 2 To Cells(Rows.Count, 2).End(xlUp).Row

i は 2から エクセルの最終行までのセル・・・などといった意味でしょうか?
どうして、ここで2からなのでしょうか?

2 to cells(rows.count, 2)   … 特にここの意味を教えていただけると、応用ができるので助かるのですが…。

どうも、ありがとうございます! 

お礼日時:2012/08/26 23:25

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

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