羊でもわかるかもしれないウイルスの話


羊「神様〜、ちょっとサワリだけでも」


神様「お客様、お触りは別料金でございます」


羊「いやそうじゃなくて」


神様「冗談冗談、忙しくてね。車がパンクしてスペアタイヤと交換する為にジャッキと格闘してたとこだよ(実話)」


羊「神様、そんなことは自動車屋さんに」


神様「『ドライブにディスクがありません』という例のメッセージの件でしょ。私なんかドライブするにもタイヤがありませんってね」


羊「そのくだりはもういいですから」


神様「原因はたくさん考えられるよ。みんなが言うようにウイルスかもしれないし、OSがおかしくなってるのかもしれない、別のアプリケーションのせいかもしれない」


羊「昨日までは普通に使えたのに今日になって突然出たんです」


神様「たいていの人はそう言うものです。それで実際に何もしなくってもパソコンは壊れるときは壊れる。パソコンとはそういうものだと思ったほうがいい。では一つ一つ考えいこう」


羊「山田なんとかってのもウイルスなんですか?」


神様「一言でウイルスと言ってもたくさんの種類があってね。こちらを見たほうが早いかな。
http://mh.rgr.jp/memo/mn0011.htm
ここには書いていないが情報を収集するスパイウェアも広い意味ではウイルスに分類される。山田オルタナティブトロイの木馬に分類されていて、感染すると勝手にデスクトップのファイルをネットに流してしまう凶悪な物なんだ。初期に山田さんという人から送られたファイルが感染したファイルだったということでその名前がついた。おじゃまんが山田くんから来てるわけではないぞ」


羊「じゃりン子チエウイルスは無いんでしょうか?」


神様「(無視)。山田なんとかウイルスに感染してるかどうかは、1の回答にあるように
http://sharp-usersnet.jp/pcstudio/disp.asp?cno=6&tbno=0&dno=108&dmode=N
この上の4つのリンクをクリックして下の画面が出なければ感染していないとすぐにわかる。ただし別のウイルスや亜種に感染してるとも限らないから念の為に調べることは別に悪いことじゃない。ただそれも過信は禁物でウイルスバスターや他のアンチウィルスでも検知率は九十数%で絶対ではないのです。因みに神様もavastをすり抜けたエッチなファイルでデスクトップに花火が上がったことがあるよ」


羊「神様、それは自業自得ということではないでしょうか?」


神様「1の2つ目のリンクはMicrosoftで出しているウイルスの駆除ツールで既にウイルスバスターで調べたのならやらなくてもいいかなとは思うけど」


羊「インストールしようとしたら『発行元を確認出来ませんでした』って言われましたよ。大会社のMicrosoftなのに怪しいです」


神様「デジタル署名って言うんだけど、第3者機関に問い合せて本物のファイルかどうかを確認する仕組みなんだ。その説明ではデジタル署名は登録してることになってるので変ですね。

Q1: Is this tool digitally signed by Microsoft?
A1: Yes.


羊「ひょっとして偽物!あらもう無視してインストールしようとしてました。『有効なWin32 アプリケーションではありません』が出ちゃった」


神様「このメッセージが出る場合はファイルが壊れている場合もあるから、ダウンロードが失敗してたのかもね。それでデジタル署名も通らなかったのかも。因みに神様はWindows7 64bitなのでこちらから
http://support.microsoft.com/?kbid=890830#top
64bit版をダウンロードして試したら普通に使えましたよ」


羊「ウイルスについては少しわかったけど、ウイルスじゃないとしたら原因は何でしょうか?」


神様「実を言うとね神様のパソコンでも同じような表示を何度も見たことがあるんだよ。別に神様のパソコンはウイルスに感染はしていないのだけど。一番多いのはフロッピーディスクの読み取りエラー。他にUSBの外付けディスクが関係してたこともある。ただしそういうのは普通一回出て終わりだから毎回起動のたびに出るとなると心配かもしれません。」


羊「起動するときに勝手に動くプログラムが犯人じゃないの?」


神様「少し鋭くなったな。Windowsは起動するときにたくさんのプログラム(スタートアップ項目、サービスやプロセス)を動かすんだよ。それで何が原因となっているかを特定するのはとても難しいんだ。とりあえず表示されなくなったようだから様子を見るのがいいかと思うよ」


羊「それでもダメだったら?」


神様「手段の一つとして、システムの復元というのがあるよ。これはWindowsの設定を定期的に作られる復元ポイントに戻すことで、正常だったころのWindowsに戻すという方法」


羊「それでもそれでもダメだったら?」


神様「Windowsを再インストール。これで治らなければ機械が壊れていることになるね」


羊「再インストールのときはよろしくお願いします。orz」


神様「・・・急に腹痛と下痢が、何か悪いウイルスに・・・」


羊「神様、ノロウイルスとかうまいこと言って逃げようとしてません?」


神様「(口から泡を出して気絶)」


羊「もう、演技が上手いんだから」

私の場合は評価の為にスターを付けるということの他に、攻撃的なユーザーをスターフレンドに入れない為に特定の人には冗談でも絶対にスターを付けないようにしていたりします。その為に私のスターによるミニコメントは仕様どうりなら比較的見せなくていい人には見ることができない場所となります。
 
3ヶ月以内のスターリスト(同じ人は最新の物)

2011/4/22
kia_44
daichan330

2011/4/21
sdkfz

2011/4/20
Yoshiya
MEI-ZA-YU

2011/4/16
karuishi

2011/4/15
Beirii
ken3memo

2011/4/14
fut573

2011/4/13
taddy_frog

2011/4/9
rouge_2008

2011/4/2
akagi_paon
NAPORIN

2011/3/27
kk_solanet

2011/3/25
goldwell

2011/3/23
alpinix

2011/3/22
nanntenn

2011/3/20
irodoria
yep
feel-so-good
abc1cba
yukee-ane
ID_u1nje3rh
o_ne_i

2011/3/18
loio
taisin0212

2011/3/16
rsc96074

2011/3/11
Shelled

2011/3/9
takejin

2011/3/4
doumoto

2011/3/2
garyo

2011/2/25
KEI-CHAN

2011/2/17
sayonarasankaku
gguide-ru
WING0
mai_68

2011/2/16
flandlescarlet
a-55
kaito0620
mzkmzk
Gleam
straika-4
kento1997
OhYeah
hoshi-kawamu
o_p
surira-soramimi

2011/2/9
searchikin

2011/2/7
Newswirl

2011/2/5
Nikola

2011/1/31
tanuki82
shaberemasenn

2011/1/27
fmht7

http://q.hatena.ne.jp/1301453031


既に解決しているようなので作らないかなと思っていましたが、
なんか無理とか言ってる人がいたのでさくさくっと作っておきます。
A列が同じ数で並んでいるとは限らないのでそれにも対応しておきました。
数万行とかなら数式はナンセンスなんで、VBAの価値もあるか。

Sub Macro()
    Application.ScreenUpdating = False
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim f As Boolean
    Dim h() As String
    Dim lastRow As Long
    Dim r As Range
    
    lastRow = Cells(Rows.count, "A").End(xlUp).Row
    
    For i = 1 To lastRow
        For j = lastRow To i Step -1
            If Cells(i, "A").Value = Cells(j, "A").Value Then
                Cells(j, "F").Value = Cells(j, "F").Value + Cells(i, "G").Value
                Exit For
            End If
        Next j
    Next i
    
    For i = 1 To lastRow
        If Cells(i, "F").Value <> "" Then
            ReDim h(0)
            For j = 1 To i
                If Cells(i, "A").Value = Cells(j, "A").Value Then
                    f = False
                    For k = 0 To UBound(h)
                        If h(k) = Cells(j, "C").Value Then
                            f = True
                            Exit For
                        End If
                    Next k
                    If Not f Then
                        ReDim Preserve h(UBound(h) + 1)
                        h(UBound(h)) = Cells(j, "C").Value
                    End If
                End If
            Next j
            Cells(i, "D").Value = UBound(h)
        End If
    Next i
    Application.ScreenUpdating = True
End Sub


削除して小計行だけを残すマクロです。

Sub Macro2()
    Application.ScreenUpdating = False
    Dim i As Long
    Dim j As Long
    Dim lastRow As Long
    
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    
    Range("G:G").Copy Range("F:F")
    For i = 1 To lastRow
        For j = i + 1 To lastRow
            If Cells(i, "A").Value = Cells(j, "A").Value And _
                Cells(i, "C").Value = Cells(j, "C").Value Then
                Cells(j, "F").Value = Cells(j, "F").Value + Cells(i, "F").Value
                Rows(i).Delete
                i = i - 1
                lastRow = lastRow - 1
                Exit For
            End If
        Next j
    Next i
    
    lastRow = Cells(Rows.Count, "A").End(xlUp).Row
    Range(Cells(1, "D"), Cells(lastRow, "D")).Value = 1
    For i = 1 To lastRow
        For j = i + 1 To lastRow
            If Cells(i, "A").Value = Cells(j, "A").Value Then
                Cells(j, "F").Value = Cells(j, "F").Value + Cells(i, "F").Value
                Cells(j, "D").Value = Cells(j, "D").Value + Cells(i, "D").Value
                Rows(i).Delete
                i = i - 1
                lastRow = lastRow - 1
                Exit For
            End If
        Next j
    Next i
    
    Application.ScreenUpdating = True
End Sub

http://q.hatena.ne.jp/1301182037


私の場合はマクロで書いたほうが楽なのでマクロの回答としましたが、
質問の条件ならば次の手順でワークシートでやるのがいいかもしれません。


1 A列をD列にコピー。
2 「2」で全て検索。Ctrl+Aを押して「2」のセルのを全て選択。
3 選択された女のセルの文字を赤にする。
4 B列全体選択し、形式を選択して貼りつけから書式を選びD列にコピー。
5 B列全体を黒に戻す。

偽善について

偽善について考えるときには必ず思い出すことがあります。


それは大学生の頃。当時の私は慈善活動やボランティアとは無縁で、むしろそういう人を軽蔑するような学生でした。それでもカトリックの寮に住んでいたので募金活動とかに熱心なおばさんとかが出入りしていて知り合う機会もあったのですが、彼女らの募金するのが当たり前という考えをすごく不快に思っていました。(キリスト教徒でも無い私がカトリックの寮に住んでいたのはただ単に家賃がただだったからです。)


ある年の大晦日前、実家に帰省するときに長距離の夜行列車に乗ることがあって、たまたま隣に乗り合わせた初老の人が目の見えない人だったことがありました。それに気づいたのはその老人がしばらくして私に、「トイレに行きたいんだけど、目が見えないから連れて行ってくれないか」というようなことを言ったからです。正直面倒臭いなと思いましたが、私はその老人の手を取り揺れる列車に気をつけながらゆっくりトイレまで案内し、親切にもそこで老人が出てくるのを待ってまた手を引いて座席まで連れていきました。


その老人は私にお礼を言っていましたが、私は別に話をする気も無いのでほとんど無視していました。覚えているのは確か函館の息子のところに行くというようなことを言っていたことで、こんな年の瀬に目の見えない爺さんに一人で来させるなんて可哀想だなって思ったことくらいです。


列車は函館について私も乗り換えの為に一度降りるのですが、私は老人の手を取り列車から降りるところまで手伝いました。予め連絡をしてあったのかそこには駅員が出迎えていて私は老人を引き渡し逃げるようにその場を離れました。それでもちょっと気になったので振り返ってみると、なんと老人は私がいない方向に頭を下げてお礼を言ってるんです。私は何かを振り払うように急ぎ足で改札を出ました。


たぶん同じ状況なら誰でも同じことをするでしょう。目の見えない老人に親切にするだけです。でも私はできるだけそんなことはしたく無いと思って生きてきました。他の人に偽善者だと思われたく無かったし、そんなのは本当の親切じゃない。単に人に親切にしている自分に酔いたいだけだ。


でも実際は老人に感謝されて素直にうれしいと思う自分がそこにいたんです。それを認めたくなくてその場を逃げようとしていました。自己満足でうれしいと思っている自分は確かにあって、私はそれと向きあいたくない為に逃げて、慈善活動を馬鹿にし募金者を軽蔑していたのです。自分の中には自分が軽蔑してきた自己満足の自分、偽善者が最初からいたんです。


そのことに気づいてからは、少し楽になれた気がしました。
私は今でも偽善ではない純粋な善があるのかどうかもわかりません。
でも人に偽善者と言われたら、たぶん「はい、偽善者です」と胸を張って答えると思います。

http://q.hatena.ne.jp/1299162578


ソートの質問で意外と難題で他にいい方法もありそうだけど、
とりあえずある程度の物はできたので置いておきます。
ただし、半角カタカナとかがまだ不完全な感じがします。

Sub mySort()
    Application.ScreenUpdating = False
    Const key As Integer = 1
    Dim rng As Range
    Dim i As Long
    Dim j As Long
    Dim moji As Integer
    Dim str As String
    Dim sc As Long
    Dim sr As Long
    Dim f As Boolean
    Dim f1 As Boolean
    
    sc = Selection.Column
    sr = Selection.Row
  
    If Selection.Columns.count < key Then
        MsgBox "キー列が不正です"
        Exit Sub
    End If
    
    If Selection.Rows.count < 2 Then Exit Sub

    Call SubSort(Selection, key, 1)
    moji = 2
    
    Do
        f = False
        f1 = False
        Set rng = Range(Cells(sr, sc), Cells(sr, sc + Selection.Columns.count - 1))
        str = StrConv(Left(Cells(sr, sc + key - 1).Value, moji - 1), vbWide)
        For i = sr + 1 To sr + Selection.Rows.count - 1
            If Len(Cells(i, sc + key - 1)) >= moji Then
                f1 = True
            End If
            
            If str <> StrConv(Left(Cells(i, sc + key - 1).Value, moji - 1), vbWide) Then
                If rng.Rows.count > 1 And f1 Then
                    Call SubSort(rng, key, moji)
                    f = True
                End If
                f1 = False
                str = StrConv(Left(Cells(i, sc + key - 1).Value, moji - 1), vbWide)
                Set rng = Range(Cells(i, sc), Cells(i, sc + Selection.Columns.count - 1))
            Else
                Set rng = Union(rng, Range(Cells(i, sc), Cells(i, sc + Selection.Columns.count - 1)))
                If i = sr + Selection.Rows.count - 1 And f1 Then
                    Call SubSort(rng, key, moji)
                    f = True
                End If
            End If
        Next i
        
        moji = moji + 1
    Loop Until Not f
    
    Application.ScreenUpdating = True
End Sub

Sub SubSort(rng As Range, key As Integer, moji As Integer)
    Dim i As Long
    Dim j As Long
    Dim lastRow As Long
    Dim sc As Long
    Dim sr As Long
    
    sc = rng.Column
    sr = rng.Row
    
    rng.Sort key1:=Cells(sr, sc + key - 1), order1:=xlAscending
    If Cells(sr + rng.Rows.count - 1, sc + key - 1).Value <> "" Then
        lastRow = sr + rng.Rows.count - 1
    Else
        lastRow = Cells(sr + rng.Rows.count - 1, sc + key - 1).End(xlUp).Row
    End If
    
    j = sr
    For i = sr To lastRow
        If Len(Cells(j, sc + key - 1).Value) >= moji Then
            If Mid(Cells(j, sc + key - 1).Value, moji, 1) Like "[ア-ン]" Or Mid(Cells(j, sc + key - 1).Value, moji, 1) Like "[ア-ン]" Then
                Range(Cells(j, sc), Cells(j, sc + Selection.Columns.count - 1)).Cut
                Range(Cells(lastRow + 1, sc), Cells(lastRow + 1, sc + Selection.Columns.count - 1)).Insert Shift:=xlDown
            Else
                j = j + 1
            End If
        Else
            j = j + 1
        End If
    Next
End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Dim i As Integer
    Dim lastRow As Long
    Dim res1 As String
    Dim res2 As String
    
    
    With Worksheets("E")
    lastRow = .UsedRange.Rows.Count
    For i = 2 To lastRow
        If .Cells(i, "A").Value = "買物" Or .Cells(i, "A").Value = "外出" Or _
            .Cells(i, "A").Value = "帰宅" Or .Cells(i, "A").Value = "遅刻" Then
            If .Cells(i, "B").Value = "" Then
                res1 = .Cells(1, "B").Value
                .Cells(i, "B").Interior.ColorIndex = 3
            Else
                .Cells(i, "B").Interior.ColorIndex = xlNone
            End If
            If .Cells(i, "C").Value = "" Then
                res2 = .Cells(1, "C").Value
                .Cells(i, "C").Interior.ColorIndex = 3
            Else
                .Cells(i, "C").Interior.ColorIndex = xlNone
            End If
        Else
            .Range(.Cells(i, "A"), .Cells(i, "C")).Interior.ColorIndex = xlNone
        End If
    Next i
    End With
    
    If res1 <> "" Or res2 <> "" Then
        If res1 <> "" And res2 <> "" Then
            res2 = "と" & res2
        End If
        MsgBox res1 & res2 & "を入力してください", vbExclamation
        Cancel = True
    End If
End Sub